다른 쉘에서 "echo -e"로 이스케이프 시퀀스


20

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

예를 들어 일부 코드 :

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

인쇄물:

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

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


"Linux shell" 과 같은 것은 없습니다 . 예를 들어 데비안 패키지 (리눅스 나 FreeBSD를 커널로 가질 수있는 운영 체제) 에서 제공 하는 echo내장/bin/shdash 되어 있습니다.
Stéphane Chazelas

그리고 이것이 필요할 때 스크립트에 이스케이프 문자를 넣는 이유입니다.

답변:


20

당신이 사용하기 때문에 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.

5
컴파일 타임에 몇 가지 sh구현이 지원 되지 않는 것을 지원할 수 있습니다 . 그것은 단지의 특정 쉬 것을 (아마가 ) 지원하지 않는 동안 특정는 않습니다. echo -ebashecho -edash-ebash
Stéphane Chazelas

17

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

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

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

3
gnouc가 지적했듯이 어느 것도 sh인식하지 못합니다 \e. 사용\033
rici

4

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


4
which echo사용하지 않아야합니다 which. 일반적으로 외부 바이너리 이기 때문에 내장 기능을 사용하고 있는지 알려주지 않을 것입니다 . type그래도 좋습니다.
Chris Down

1
내 주요 껍질 (zsh)에는 있지만 ( type which또는에 의해 공개 된 which which) 내장되어 있습니다. ;)
piojo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.