명령줄(bash)에서 '와 "의 차이점은 무엇입니까?

명령줄(bash)에서 '와 "의 차이점은 무엇입니까?

나는 명령줄에서 ''and(작은 따옴표와 큰 따옴표)를 같은 의미로 사용했지만 최근에는 ' '가 확장되지 않는 반면 ' '는 확장되는 것을 발견했습니다. 검색해보니 허용되는 것 같았어요""'$HOME/some/dir'"$HOME/some/dir"""일부완전한 보호를 허용 하면서 특수 문자를 보호합니다 ''. 그러면 어떤 다른 문자가 보호 ''되고 어떤 문자가 보호되지 않습니까 ""?

편집: 무엇입니까실제어떤 상황에서 이러한 차이가 중요할 수 있습니까?

답변1

bash 매뉴얼 페이지를 확인하십시오. 인용 전용 섹션이 있습니다. 이것은 여기에 사용된 CC-BY-SA 라이센스와 호환되지 않는 GFDL에 따라 라이센스가 부여되었기 때문에 전체 내용을 인용하지는 않지만 실제로는가장 명확한 답변을 얻으려면 이것을 읽으십시오..

요약하자면, 작은따옴표는 모든 해석을 중지합니다. 문자열은 문자 그대로 렌더링됩니다. 큰따옴표는 $(달러 기호), `(백틱)을 특수 문자로 유지하고, (백슬래시) 뒤에 다른 문자가 오는 경우 특수 문자로 유지합니다. 기록 확장 기능이 활성화된 경우(기본값) 특별하게 처리됩니다 \.!

실제 사용에서는 $쉘이 대부분의 명령줄을 난독화하는 것을 방지하면서 다양한 확장(변수 등)을 활성화하려는 경우가 많기 때문에 이것은 큰 문제입니다.

답변2

작은따옴표는 포함된 모든 문자의 리터럴 값을 유지하지만

큰따옴표는 달러 기호 $, 백틱 - - 및 백슬래시의 리터럴 값을 유지하지 않는다는 점에서 다릅니다.

달러 기호와 백틱은 큰따옴표로 묶인 경우 특별한 의미를 유지하는 반면, 백슬래시 문자는 달러 기호, 백틱, 큰따옴표, 백슬래시 또는 개행 문자 앞에 오는 경우에만 특별한 의미를 유지합니다.

예:

[user@localhost~]$ echo '$HOME'
$HOME
[user@localhost~]$ echo '`pwd`'
`pwd`
[user@localhost~]$ echo '"Hello world"'
"Hello world"

[user@localhost~]$ echo "$HOME"
/home/user
[user@localhost~]$ echo "`pwd`"
/home/user

[user@localhost~]$ echo ""Hello world""
Hello world
[user@localhost~]$ echo "\$HOME"
$HOME
[user@localhost~]$ echo "\`pwd\`"
`pwd`
[user@localhost~]$ echo "\"Hello ,world\""
"Hello, world"

관련 정보