![bash --posix와 dash에서 작은따옴표가 다르게 동작하는 이유는 무엇입니까?](https://linux55.com/image/214918/bash%20--posix%EC%99%80%20dash%EC%97%90%EC%84%9C%20%EC%9E%91%EC%9D%80%EB%94%B0%EC%98%B4%ED%91%9C%EA%B0%80%20%EB%8B%A4%EB%A5%B4%EA%B2%8C%20%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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보다 나은가요?