백 슬래시는 특별히으로 취급 echo -e
하지만, 먼저 그들은된다 가끔 (이 경우에 쉘에 의해 특별하게 처리 bash
쉘의에 따라) 인용 규칙.
echo
실제로 보는 주장 은 Hello\\n
입니다. 당신이 통과하기 때문에 -e
에 echo
, 그것은 특별히 백 슬래시 이스케이프를 처리하고 \\
단일로 축소되어 \
. 최종 n
은 이스케이프되지 않으므로 문자 그대로 나타납니다.
그 이유 echo
는 쉘 자체 의 작동 이전과는 별도로 쉘 이 일부 상황 에서는 \
특별하게 취급 하지만 다른 상황에서는 그렇지 않기 때문입니다. 인용 부호가없는 \
문자는 항상 특별하게 처리되고, 작은 따옴표 \
는 특수하게 처리되지 않지만, 실행 된 명령에서와 같이 큰 따옴표 \
문자 의 처리 는 더 미묘하고 복잡합니다.
쉘과 같은 명령을 두 번 인용 텍스트, 발견하면 "Hello\\\n"
, 그것은 치료 \
그 자체가 특별한 의미 따옴표 안에있을 수있는 문자 앞에 때 이스케이프 문자로를 하지, 그렇지 .
\
때때로 내부에 특별한 의미가 있기 때문에 ""
, \
바로 앞에 있는 a 는 \
그 초를 인용하는 효과가 \
있습니다. 따라서 큰 따옴표 안에 첫 번째 \\
는으로 축소됩니다 \
.
- 첫 두
\
문자 뒤에는 첫 두 문자에 \
영향을받지 않고 앞에있는 세 번째 문자가 있습니다 n
. 그러나 n
큰 따옴표 안에 특수하게 취급되는 문자는 아니므로 \
이전에는 특수하게 취급되지 않습니다. 따라서 \n
유지됩니다 \n
.
결과는 큰 따옴표로 \\\n
로 해석됩니다 \\n
.
를 echo -e
볼 때 \\n
첫 번째 \
는 두 번째에서 특별한 의미를 제거하므로 문자 그대로 해당 텍스트를 echo
인쇄 \n
합니다.
당신의 목표가 Hello
추가 줄 바꿈 으로 인쇄 하지만 백 슬래시가없는 것 (질문은 원래 이것에 대해 모호하고 유용한 예라고 생각합니다)이라면, 한 가지 해결책은을 제거하는 것 \
입니다. 끝에 추가 줄 바꿈으로 echo -e "Hello\\n"
출력 Hello
을 실행 합니다 .
더 나은 해결책은 작은 따옴표를 사용하고 쓰는 것 echo -e 'Hello\n'
입니다. 작은 따옴표는 가장 강력한 인용 형식입니다. 더 좋은 해결책은 일반적으로 printf
대신에 사용 하는 echo
것입니다 printf 'Hello\n\n'
.
Hello\
백 슬래시와 추가 줄 바꿈을 포함하여 인쇄하는 것이 목표라면 이중 인용 방식이 가능하지만 번거 롭습니다. : 작업 거꾸로 알아낼 echo -e
변환 \\
에 \
와 \n
줄 바꿈에 두 번 인용 변환 \\
에를 \
당신이 여섯 백 슬래시 (함께 할 수 있도록 echo -e "Hello\\\\\\n"
) 때문에, \\n
로 회전 \n
하나로 인해 백 슬래시가 서로를 탈출. 큰 따옴표는 이스케이프되지 않은 \n
경우에도 유지되므로 5로도 할 수 있습니다 \
.
이것은 작은 따옴표의 장점을 보여줍니다 : echo -e
작은 따옴표 ( echo -e 'Hello\\\n'
) 안에보고 싶은 것을 넣으 십시오 . printf
여기도 좋습니다. 하나의 옵션은 printf 'Hello\\\n\n'
입니다. 그러나 printf
실제로 빛나는 부분은 추가 인수를 연결할 수 있다는 것입니다. 대신에 printf '%s\n\n' 'Hello\'
두 번째 인수 ( Hello\
작은 따옴표는 아무 것도 변경하지 않기 때문에 문자 그대로)를 삽입하는을 사용할 수 있습니다 %s
.