![bash -c"의 따옴표 자체는 그 안의 다른 명령과 따옴표를 묶고 구별하는 데에만 사용됩니까? [닫은]](https://linux55.com/image/194820/bash%20-c%22%EC%9D%98%20%EB%94%B0%EC%98%B4%ED%91%9C%20%EC%9E%90%EC%B2%B4%EB%8A%94%20%EA%B7%B8%20%EC%95%88%EC%9D%98%20%EB%8B%A4%EB%A5%B8%20%EB%AA%85%EB%A0%B9%EA%B3%BC%20%EB%94%B0%EC%98%B4%ED%91%9C%EB%A5%BC%20%EB%AC%B6%EA%B3%A0%20%EA%B5%AC%EB%B3%84%ED%95%98%EB%8A%94%20%EB%8D%B0%EC%97%90%EB%A7%8C%20%EC%82%AC%EC%9A%A9%EB%90%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%8B%AB%EC%9D%80%5D.png)
업데이트: 방금 제가 틀렸다는 것을 깨달았지만 이를 수정하는 방법을 모르겠습니다.
예를 들어, 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]