"sh -c" 명령 문자열에 변수를 정의하려고 합니다.
sh -c "TMP=??; echo $TMP;"
아무것도 인쇄되지 않습니다.
"sh -c" 문자열에 변수를 정의할 수 없는 이유는 무엇입니까?
답변1
sh -c 'TMP=??; echo $TMP;'
큰따옴표를 사용하면 명령줄을 작성할 때 매개변수 확장이 발생합니다. 즉, 셸에 표시되지 않습니다.
TMP=??; echo $TMP;
그것의 주장으로 그러나
TMP=??; echo ;
$TMP
호출 쉘 환경에서 비어 있는 경우 .
답변2
sh -c 'TMP=??; echo "$TMP"'
그리고더블대화형 셸에 의해 확장된 sh -c
코드 주위에 따옴표가 있습니다.$TMP
앞으로코드 sh -c
실행. 작은따옴표를 사용하면 $TMP
쉘 내에서 확장됩니다 sh
. ( $TMP
변수 확장 도 올바르게 인용했습니다 echo
.)
작은따옴표는 변수 확장으로부터 문자열을 보호합니다.
이것을 스크립트 내에서 파일 이름 globbing 패턴 ??
으로 처리하지 않으려면 다음 을 사용하십시오.sh -c
sh -c 'TMP="??"; echo "$TMP"'