bash -c"의 따옴표 자체는 그 안의 다른 명령과 따옴표를 묶고 구별하는 데에만 사용됩니까? [닫은]

bash -c"의 따옴표 자체는 그 안의 다른 명령과 따옴표를 묶고 구별하는 데에만 사용됩니까? [닫은]

업데이트: 방금 제가 틀렸다는 것을 깨달았지만 이를 수정하는 방법을 모르겠습니다.

예를 들어, 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] 

관련 정보