POSIX 쉘에서 작은따옴표는 "하드" 따옴표가 되어서는 안 되나요?
Bash와 달리 Dash가 내부적으로 이스케이프 문자를 처리하는 것처럼 보이는 이유는 무엇입니까?
$ bash --posix -c "echo ['[\\n]']"
[[\n]]
$ dash -c "echo ['[\\n]']"
[[
]]
답변1
작은따옴표는 동일하게 동작하지만 echo
다르게 구현됩니다.
sh -c "echo ['[\\n]']"
(무엇이든 ) 실행할 때 가장 먼저 일어나는 일은 sh
대화형 셸이 큰따옴표로 묶인 문자열을 처리하여 \\
단일 \
. 실행을 위해 쉘에 전달되는 문자열은 입니다 echo ['[\n]']
.
이 내부 셸 echo
(아마도 내장)에서 실행된 명령은 단일 인수를 볼 수 있으며 [[\n]]
개행과 같은 프로세스의 C 스타일 백슬래시 이스케이프 구현의 일부 구현은 있지만 다른 명령은 그렇지 않습니다.echo
\n
그것을 시도 sh -c "printf '%s\\n' ['[\\n]']"
하고 참조하십시오왜 printf가 echo보다 나은가요?