백 슬래시는 특별히으로 취급 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.