환경 변수 한 줄이 비어 있습니다.

환경 변수 한 줄이 비어 있습니다.

내 zsh가 왜 이렇게 작동합니까?

% MYVAR="hi" echo $MYVAR

% MYVAR="$(date)" echo $MYVAR

% export MYVAR="$(pwd)"
% echo $MYVAR
/Users/theonlygusti

환경 변수가 같은 줄에 설정되지 않은 이유는 무엇입니까?

답변1

지휘 중

MYVAR="hi" echo $MYVAR

이 변수는 명령 환경에 설정됩니다 MYVAR. 그러나 명령은 이 변수를 사용하지 않습니다. 현재 쉘은 명령줄에서 인수를 확장합니다.hiechoecho$MYVAR전화하기 전에echo.

따라서 MYVAR변수가 이전에 셸에 존재하지 않으면 명령은 개행만 출력합니다.

마지막 예에서는 echo명령줄에서 확장을 호출하기 전에 셸에서 변수를 설정했습니다. $MYVAR이 시점에서 변수가 결과로 설정되므로 $(pwd)(내보내기가 필요하지 않음) 셸은 $MYVAR변수를 호출하기 전에 해당 값으로 바꿉니다 echo.

사이의 차이

variable=value some-command

그리고

variable=value; some-command

또는 이에 상응하는

variable=value
some-command

예, 첫 번째 경우 변수는 현재 셸이 아닌 환경의 값으로 설정되는 some-command반면, 두 번째/세 번째 경우 변수는 현재 셸에 설정된 다음 some-command호출됩니다. 다르게 내보낸 경우 변수 를 사용하려는 경우 variable환경에서도 변수를 사용할 수 있습니다 .some-command

예:

$ unset -v var

다른 명령을 호출하는 동안 변수를 설정하면 명령 환경에 변수가 설정되지만 로컬 환경에는 설정되지 않습니다.

$ var=1 sh -c 'printf "var is %s\n" "$var"'
var is 1
$ printf 'var is %s\n' "$var"
var is

로컬 환경에서 변수를 설정하되 내보내지 말고 로컬로 설정하세요.

$ var=1; sh -c 'printf "var is %s\n" "$var"'
var is
$ printf 'var is %s\n' "$var"
var is 1

하위 프로세스에서 사용할 수 있도록 변수를 내보냅니다.

$ export var
$ sh -c 'printf "var is %s\n" "$var"'
var is 1

알아채다

MYVAR=$(pwd)

동일합니까?

MYVAR=$PWD

관련 정보