답변:
어느 쪽의 사용 export
환경 변수로 돌려 또는 명령에 직접 전달할.
VAR="Test" sh -c 'echo "Hello $VAR"'
VAR="Test"
export VAR
sh -c 'echo "Hello $VAR"'
다음과 같이 명령 삽입 취약점을 유발하므로 보간을 허용하기 위해 쉘 코드 주위에 큰 따옴표를 사용하지 마십시오.
sh -c "echo 'Hello $ VAR'"
$VAR
다음과 같은 내용이 포함 된 경우 호출되면 재부팅';reboot #
export var="Test"
로 한 줄로 도 할 수 있습니다 .
다음은 변수를 sh -c
위치 인수로 전달하는 또 다른 방법입니다 .
{
VAR="world"
VAR2='!'
sh -c 'echo "Hello ${0}${1}"' "$VAR" "$VAR2"
}
$@
예를 들어 예상대로 작동 할 수 있습니다. sh -c 'echo "Hello $@"' _ "$VAR" "$VAR2"
`
$0
. 쉘에 의해 오류 / 경고 메시지에 표시 되기 때문입니다 .
환경 변수로 내 보내지 않으려면 다음을 수행하십시오. variabe 정의를 파일에 저장하고 다음 .var_init.sh
과 같이 하위 셸에서 소스를 지정하십시오.
.var_init.sh
VAR="Test"
명령 행에서 :
sh -c ". .var_init.sh && echo \$VAR" # Make sure to properly escape the '$'
이런 식으로, 서브 쉘 실행시에만 변수를 설정합니다.
ENV=.var_ini.sh sh -c '...'
.var_init.sh
현재 디렉토리에서 찾을 것으로 예상 된다면 ()과 반대로 $PATH
작성되어야합니다.. ./var_init.sh