
답변1
\
셸에 대한 인용 연산자입니다. 다른 종류의 따옴표 밖에 있는 경우는 \x
다음과 같습니다 'x'
( x
개행 문자인 경우는 제외).
그래서:
echo \\\x
처럼:
echo '\''x'
또는
echo '\x'
So는 echo
두 개의 인수, 즉 (이름)을 포함하는 인수 echo
와 를 포함하는 인수 로 호출됩니다 \x
.
POSIX에 따라echo
, 피연산자(명령 이름 이외의 인수)에 백슬래시가 포함되어 있거나 첫 번째 피연산자가 지정되지 않은 경우 의 동작은 -n
지정되지 않습니다. 그 밖에서도 행동이 다양하다는 것을 알게 될 것입니다.
UNIX 사양(위 링크에 XSI 적용)에 따라 표준 이스케이프 시퀀스 중 하나가 아니기 때문에 의 동작 echo '\z'
도 지정되지 않았습니다 .\z
그러나 내장된 echo
와 같은 UNIX 호환 을 사용하면 다음을 보장할 수 있습니다.echo
bash -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가 됩니다.