theonlygusti Asked: 2022-01-28 01:55:32 +0800 CST2022-01-28 01:55:32 +0800 CST 2022-01-28 01:55:32 +0800 CST 一行环境变量为空[重复] 772 为什么我的 zsh 会这样做? % MYVAR="hi" echo $MYVAR % MYVAR="$(date)" echo $MYVAR % export MYVAR="$(pwd)" % echo $MYVAR /Users/theonlygusti 为什么显然没有设置同行环境变量? zsh macos 1 个回答 Voted Best Answer they 2022-01-28T02:03:41+08:002022-01-28T02:03:41+08:00 在命令中 MYVAR="hi" echo $MYVAR 该变量在命令的环境中MYVAR设置为。但是,该命令不使用此变量。在调用. _hiechoecho$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
在命令中
该变量在命令的环境中
MYVAR
设置为。但是,该命令不使用此变量。在调用. _hi
echo
echo
$MYVAR
echo
因此,如果
MYVAR
变量事先不存在于 shell 中,该命令将只输出一个换行符。在上一个示例中,您在使用命令行
echo
扩展调用之前在 shell 中设置了变量。$MYVAR
由于该变量设置$(pwd)
为该点的结果(不需要导出),因此 shell$MYVAR
在调用echo
.和...之间的不同
和
或同等的
就是在第一种情况下,变量被设置为环境中的值
some-command
,而不是在当前shell中,而在第二种/第三种情况下,变量被设置在当前shell中,然后some-command
被调用。如果variable
另外导出,那么该变量也将在 的环境中可用some-command
,它是否要使用该变量。例子:
在调用另一个命令的同时设置变量会在命令的环境中设置该变量,而不是在本地环境中:
在本地环境中设置变量,但不导出它仅在本地设置它:
导出变量使其在子进程中可用:
注意
是相同的