명령이 `echo \\z` 출력을 \z로 표시하는 이유는 무엇입니까?

명령이 `echo \\z` 출력을 \z로 표시하는 이유는 무엇입니까?

명령은 echo $(echo \\\z)다음에서 온 것입니다.그 책 , 왜 출력되는지 이해가 안 돼요

\지

출력하면 될 것 같아요

답변1

\셸에 대한 인용 연산자입니다. 다른 종류의 따옴표 밖에 있는 경우는 \x다음과 같습니다 'x'( x개행 문자인 경우는 제외).

그래서:

echo \\\x

처럼:

echo '\''x'

또는

echo '\x'

So는 echo두 개의 인수, 즉 (이름)을 포함하는 인수 echo와 를 포함하는 인수 로 호출됩니다 \x.

POSIX에 따라echo, 피연산자(명령 이름 이외의 인수)에 백슬래시가 포함되어 있거나 첫 번째 피연산자가 지정되지 않은 경우 의 동작은 -n지정되지 않습니다. 그 밖에서도 행동이 다양하다는 것을 알게 될 것입니다.

UNIX 사양(위 링크에 XSI 적용)에 따라 표준 이스케이프 시퀀스 중 하나가 아니기 때문에 의 동작 echo '\z'도 지정되지 않았습니다 .\z

그러나 내장된 echo와 같은 UNIX 호환 을 사용하면 다음을 보장할 수 있습니다.echobash -o posix -O xpg_echo

echo '\\z'

동일:

echo \\\\z

또는:

echo \\\\\z

출력됩니다 \z<newline>.

그 외에는 POSIX로부터 어떠한 보증도 받을 수 없습니다.

구현은 NUL 문자를 z출력 할 수 있습니다 \z...no such escape sequence: \z

그러나 실제로는 이스케이프 시퀀스로 이해되는 구현을 모르기 \z때문에 내가 시도한 모든 구현이 거기에서 출력된다는 것을 알았습니다 \z<newline>.

이식 가능하고 안정적인 텍스트 출력 방법을 원한다면,을 사용하지 말고 대신 echo사용하세요printf.

답변2

명령문 echo를 여러 섹션으로 분할

\는 bash가 이스케이프로 인식하는 변수입니다.

따라서 \는 문자 "\"를 이스케이프하므로 \를 인쇄합니다.

\z는 문자 "z"를 이스케이프하므로 z를 인쇄합니다.

종합하면 \z가 됩니다.

관련 정보