답변:
echo -e
그리고 echo $'...'
그들은 다음과 같은 이스케이프 시퀀스를 지원하는 점에서 유사 모두 :
\a alert (bell)
\b backspace
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
\uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
차이점이 있습니다. 위의 사항 외에도 다음을 echo -e
지원합니다.
\c suppress further output
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
대조적으로 다음을 $'....'
지원합니다.
\' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \cx a control-x character
둘 사이에서 \c
확장이 호환되지 않는지 확인하십시오.
$ echo -e 'start\n\cIstop'
start
$ echo $'start\n\cIstop'
start
stop
들면 echo -e
위 \c
하여 무시하고, 상기 출력을 억제한다 Istop
. 반면, 대한 $'...'
의이 \cI
탭으로 해석됩니다.
$"..."
와 달리 $'...'
기능 $"..."
은 상당히 다릅니다. 현재 로케일에 따라 포함 된 문자열이 변환됩니다.
echo -e
논란echo -e
쉘에서 보편적으로 지원되지 않으며 많은 사람들이 -e
옵션을 디자인 실수라고 생각합니다. 관찰 :
$ ls
-e -n
$ echo *
$ printf "%s\n" *
-e
-n
보시다시피, 인쇄 대상 echo
이 대시 로 시작하면 결과가 예상치 못한 것일 수 있습니다. 인쇄 할 첫 번째 문자열이 echo
대시로 시작하지 않는 것이 확실 하지 않으면을 사용하는 것이 좋습니다 printf
.
이러한 이유로 POSIX 표준은 다음과 같이 결론을 내립니다 .
새로운 응용 프로그램에서는 에코 대신 printf를 사용하는 것이 좋습니다.
bash
지난 22 년간 유지해온 Chet Ramey는 다음 에 동의합니다 .
[N] 모든 코드는 printf를 사용해야합니다.
*
실제로 특정되지 않습니다 echo
. 짧거나 긴 옵션 (일반적인 방식으로 작성 됨)을 인식하고를 포함하여ls
파일 이름 피연산자를 사용하는 모든 명령에서 발생합니다 . 논란의 여지가 있지만 echo
(소스에서 언급했듯이) echo
일반적으로 --
옵션의 끝을 나타내는 것을 받아들이지 않는 반면에와 같은 명령을 작성할 수 있기 때문에 상황이 조금 더 나쁩니다 ls -- *l
. (그리고 실제로 는 스크립트에서 *
또는로 시작하는 글로브를 사용할 때 일반적으로 이런 식으로 명령을 작성해야합니다 -
.)
\n
내가 사용하는 경우 그래서 실제로는 중요하지 않습니다, 이스케이프 시퀀스를 echo -e '...'
, echo $'...'
또는echo $"..."
Hello\nWorld
합니다.-e
이스케이프 문자를 해석 하려면 스위치가 필요합니다 .