아래 명령이 인쇄되지만 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
\b
echo
printf "%s\n" x\\by