'sh -c'의 변수 정의

'sh -c'의 변수 정의

"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"'

관련 정보