다른 쉘에서 “echo -e”로 이스케이프 시퀀스 Linux의 쉘에서 명령에 플래그 -e가

Linux의 쉘에서 명령에 플래그 -e가 존재하지 않는 것 같습니다 echo. 이것은 엉망인 설정입니까 아니면 “정상”입니까?

예를 들어 일부 코드 :

#!/bin/sh
echo -e "\e[3;12r\e[3H"

인쇄물:

-e \e[3;12r\e[3H

이것은 전에 작동했습니다! 일부 stty명령이 크게 잘못되었다고 생각하여 더 이상 작동하지 않습니다. 누군가는 제 생각 sh은 실제로 단지 bash였습니다.



답변

당신이 사용하기 때문에 sh,하지 bash, 그 다음 echo에 명령 sh옵션이 없습니다 -e. 에서 sh맨 :

echo [-n] args...
            Print the arguments on the standard output, separated by spaces.
            Unless the -n option is present, a newline is output following the
            arguments.

그리고 그것도 없습니다 \e:

        If any of the following sequences of characters is encountered
        during output, the sequence is not output.  Instead, the specified
        action is performed:

        \b      A backspace character is output.

        \c      Subsequent output is suppressed.  This is normally used at
                the end of the last argument to suppress the trailing new
                line that echo would otherwise output.

        \f      Output a form feed.

        \n      Output a newline character.

        \r      Output a carriage return.

        \t      Output a (horizontal) tab character.

        \v      Output a vertical tab.

        \0digits
                Output the character whose value is given by zero to three
                octal digits.  If there are zero digits, a nul character
                is output.

        \\      Output a backslash.

        All other backslash sequences elicit undefined behaviour.


답변

-e(사실, POSIX는 (비록 지원 허용 일반적으로 더 옵션을지지 않습니다 에코 POSIX 아닌 -n참조) 여기 ), 그리고 /bin/sh시스템에 POSIX 쉘 것으로 보인다. -e일부 셸에서 허용되는 확장명이지만 의존해서는 안되며 이식성이 없습니다. 이상적으로는 printf을 가진 쉘을 사용하거나로 전환하십시오 echo -e.

또한 \e아래 주석에서 주의 사항을 참조하십시오 \033.

printf '\033[3;12r\033[3H'


답변

언제든지 거의 모든 쉘에있는 것을 참고, 당신은 “에코”를 입력하여 호출 할 알아낼 수 type echo또는 which echo. 일반적으로 쉘 내장입니다. 따라서 어떤 “echo”가 설치되어 있고 어떤 쉘을 사용하고 있는지에 따라 다릅니다.


답변