백슬래시의 의미

백슬래시의 의미

아래 명령이 인쇄되지만 Smith인쇄되지 않는 이유는 무엇입니까 \Smith?

echo \Smith

답변1

이것백슬래시는 쉘 구문의 이스케이프 문자입니다.저것:

<newline>을 제외하고 후속 문자는 리터럴 값으로 유지되어야 합니다. ... <백슬래시> ... 제거해야 합니다.

개행 문자나 이스케이프 할 수 있는 쉘 특수 문자( , , , , , , , , , , , , , , , , , , 또는 탭) 가 아니기 때문에 \S동일한 의미를 갖습니다 S. 주어진 인수에 리터럴 백슬래시를 포함하려면 차례로 또는 다른 인용 연산자를 사용하여 이스케이프하십시오.S$"'{[`\|&;<>()?*[#~=%echo\

echo \\Smith

또는

echo '\Smith'

또는

echo "\Smith"

( \특별한 의미는 여전히 큰따옴표 안에 유지되지만 뒤에 있을 때는 유지되지 않고 S뒤에 \, 또는 개행 문자가 올 때만 유지됩니다. `)$"

이제 많은 echo구현에서는 \인수에서 발견될 때 특수 처리를 수행하므로(일반적으로 따르지는 않지만 S보장되지는 않음) 다음을 사용할 수 있습니다 printf.

printf '%s\n' '\Smith'

참고: 이는 예제에서 참조되지 않은 사례에 대해 지정된 동작이지만, 달리 참조되거나 파일에서 read변경될 수 있습니다.

답변2

\S이스케이프된 S경우 특수 문자가 아니므로 제공됩니다 S. 인쇄하려면 백슬래시를 두 배로 늘려야 합니다.echo \\Smith

편집: 그러나 더 일반적으로 "y"("x"는 백스페이스로 보호됨 )와 일부 버전 (대시, zsh)을 출력하고 "x\ by"를 출력하는 . 를 printf사용하는 것의 차이점을 확인하는 것이 좋습니다 .echo x\\by\bechoprintf "%s\n" x\\by

관련 정보