bash --posix와 dash에서 작은따옴표가 다르게 동작하는 이유는 무엇입니까?

bash --posix와 dash에서 작은따옴표가 다르게 동작하는 이유는 무엇입니까?

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보다 나은가요?

관련 정보