Zsh

一行環境變數為空

  • January 27, 2022

為什麼我的 zsh 會這樣做?

% MYVAR="hi" echo $MYVAR

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

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

為什麼顯然沒有設置同行環境變數?

在命令中

MYVAR="hi" echo $MYVAR

該變數在命令的環境中MYVAR設置為。但是,該命令不使用此變數。呼叫. _hi``echo``echo``$MYVARecho

因此,如果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

引用自:https://unix.stackexchange.com/questions/688153