업데이트: 방금 제가 틀렸다는 것을 깨달았지만 이를 수정하는 방법을 모르겠습니다.
예를 들어, bash -c " echo "$S" "
및 bash -c ' echo "$S" '
완전히 다른 출력을 제공합니다. 하지만 제가 현재 알고 있는 지식으로는 올바른 결론을 내리기에는 충분하지 않습니다.
제목이 좀 난잡하게 느껴질 수도 있지만,
예를 들어 기본적으로bash -c ' echo " smth " '
자체적으로 사용하기 위해 echo
작은따옴표가 필요한 경우'
echo ' #!$smth '
그런 다음 큰따옴표 나 다른 작은따옴표 bash -c
로 전환해야 합니다."
echo
그래서bash -c " echo ' #!$smth ' "
bash -c
작은 따옴표든 큰 따옴표든 별 차이가 없습니다.
내 이해가 정확합니까? 아니면 자유롭게 수정해 주시기 바랍니다.
감사해요.
답변1
큰따옴표로 묶이거나 따옴표가 없는 변수(예: $S 또는 "$S")는 현재 셸에서 확장됩니다. 문자열을 작은따옴표로 묶으면 문자 그대로(작은따옴표 제외) 하위 프로세스에 전달됩니다. 귀하의 예에서는
...
---> parent-shell
------> child-shell (bash -c)
------> echo command executed in child shell.
첫 번째 예에서는 $S가 상위 셸에서 확장됩니다. 두 번째 예에서 $S는 정의되지 않은 하위 쉘에서 null로 확장됩니다. S 변수를 내보내면 하위 쉘로 전달할 수 있습니다. 예:
[me] S=foo
[me] bash -c " echo "$S" "
foo
[me] bash -c ' echo "$S" '
[me] export S
[me] bash -c ' echo "$S" '
foo
[me]