Bash 为什么shell变量作为命令前缀时会变成环境变量?
如果在bash shell中键入以下命令:Bash 为什么shell变量作为命令前缀时会变成环境变量?,bash,shell,Bash,Shell,如果在bash shell中键入以下命令: STUFF=Blah env | grep STUFF 我不明白为什么它会返回STUFF=Blah,因为我希望得到一个空输出 我感到困惑的原因是(据我所知)STUFF=Blah将STUFF设置为shell变量,但env命令返回所有环境变量 但是在上面的STUFF=Blah中,似乎设置为一个环境变量。我的理解哪里出错了?在命令前面加上变量赋值会导致该命令在设置了该变量的环境中运行。env命令会在其环境中看到STUFF设置为Blah,但不会看到当前she
STUFF=Blah env | grep STUFF
我不明白为什么它会返回STUFF=Blah
,因为我希望得到一个空输出
我感到困惑的原因是(据我所知)STUFF=Blah
将STUFF设置为shell变量,但env
命令返回所有环境变量
但是在上面的
STUFF=Blah
中,似乎设置为一个环境变量。我的理解哪里出错了?在命令前面加上变量赋值会导致该命令在设置了该变量的环境中运行。env
命令会在其环境中看到STUFF
设置为Blah
,但不会看到当前shell
大致相当于
(export STUFF=Blah; env | grep STUFF)
因为对STUFF
的赋值不影响当前shell,只影响env
。(我说“粗略”,因为在本例中,STUFF
位于子shell中执行的每个命令的环境中,而不仅仅是env
)来自bash手册页(环境部分):
任何简单命令或函数的环境都可以通过在其前面加上参数赋值来临时扩充,如上文参数中所述。这些赋值语句只影响该命令所看到的环境
这意味着您对命令开头的
STUFF=Blah
的理解是不正确的。在命令之前使用时,它为正在运行的命令设置环境变量。当它自己使用时(只是STUFF=Blah
而没有任何进一步的命令),它会设置一个局部shell变量。并且因为它只影响紧接着的命令,所以设置shell变量对它来说是没有用的。