bash -c subshell의 변수 구문 분석

bash -c subshell의 변수 구문 분석

"bash -c" 내 하위 쉘의 변수를 구문 분석하는 방법은 무엇입니까?

아래에서 두 번째 하위 셸(내부에 "echo"가 있는 하위 셸)이 올바르게 구문 분석됩니다. "touch"를 사용하는 첫 번째 하위 쉘은 그렇지 않습니다.

/bin/bash -c "\
A=/tmp/foo; \
echo $( touch \$A;  ); \
echo $( echo in subshell, \$A; ); \
"

답변1

그 이유는 간단합니다. 왜냐하면 서브쉘은 서브쉘이 아닌 현재 쉘에서 계산되기 때문입니다. 이스케이프하면 $()예상대로 작동합니다.

/bin/bash -c "\
A=/tmp/foo; \
echo \$( touch \$A;  ); \
echo \$( echo in subshell, \$A; ); \
"

답변2

큰따옴표를 사용하기 때문에 Bash는 먼저 전체 문자열을 평가한 다음 실행합니다.

첫 번째 줄을 다음과 같이 바꾸면 실행하려는 코드가 /bin/bash -c echo “\다음과 같이 표시됩니다 .bash -c

/bin/bash -c  echo "\


touch \$A;  ); echo $( echo in subshell, \$A; ); "
echo in subshell, \$A; ); "
touch \$A;  ); echo $( echo in subshell, \$A; ); 
touch \$A;  
echo in subshell, \$A; ); 
echo in subshell, \$A; 

대신 작은따옴표를 사용하세요.

관련 정보