Zsh
一行環境變數為空
為什麼我的 zsh 會這樣做?
% MYVAR="hi" echo $MYVAR % MYVAR="$(date)" echo $MYVAR % export MYVAR="$(pwd)" % echo $MYVAR /Users/theonlygusti
為什麼顯然沒有設置同行環境變數?
在命令中
MYVAR="hi" echo $MYVAR
該變數在命令的環境中
MYVAR
設置為。但是,該命令不使用此變數。在呼叫. _hi``echo``echo``$MYVAR
echo
因此,如果
MYVAR
變數事先不存在於 shell 中,該命令將只輸出一個換行符。在上一個範例中,您在使用命令行
echo
擴展呼叫之前在 shell 中設置了變數。$MYVAR
由於該變數設置$(pwd)
為該點的結果(不需要導出),因此 shell$MYVAR
在呼叫echo
.和…之間的不同
variable=value some-command
和
variable=value; some-command
或同等的
variable=value some-command
就是在第一種情況下,變數被設置為環境中的值
some-command
,但不在目前shell中,而在第二種/第三種情況下,變數被設置在目前shell中,然後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