为什么shell变量在命令前缀时会成为环境变量?

nsi*_*lex 2 bash shell

如果我在bash shell中键入以下命令:

STUFF=Blah env | grep STUFF
Run Code Online (Sandbox Code Playgroud)

我很困惑,为什么它会返回,STUFF=Blah因为我希望得到一个空输出.

我感到困惑的原因是因为(据我所知)STUFF=Blah将STUFF设置为shell变量,但该env命令返回所有环境变量.

但在上面STUFF=Blah似乎被设置为环境变量.我的理解在哪里出错了?

小智 5

从bash手册页(环境部分):

任何简单命令或函数的环境可以通过在其前面加上参数赋值来临时扩充,如上面参数中所述.这些赋值语句仅影响该命令所见的环境.

这意味着您对STUFF=Blah命令开头的理解不正确.在命令之前使用时,它为正在运行的命令设置环境变量.当它自己使用时(只是STUFF=Blah没有任何进一步的命令),它设置一个本地shell变量.