sem*_*ude 5 linux bash shell sh
我想弄明白,oneliner怎么样
var=value command
Run Code Online (Sandbox Code Playgroud)
实际上是sh.我希望变量var
被传递到环境中command
,但不应该存在于当前环境中(请不要在最后省略免责声明!)
首先,让我们在bash中尝试它
#bash
$ var= #just to be sure it's empty
$ var=value echo something
. something
$ echo "$var"
.
$ var=value set something
$ echo "$var"
.
Run Code Online (Sandbox Code Playgroud)
目前,它按预期工作.但是当我们去sh并重新输入相同的输入时,它会是这样的:
#sh
$ var=
$ var=value echo something
. something
$ echo "$var"
.
$ var=value set something
$ echo "$var"
. value
Run Code Online (Sandbox Code Playgroud)
最后一个不同.set
sh 是命令某种特殊情况吗?为什么变量var
已保存在我们当前的环境中?
免责声明:我知道,echo
并且set
是shell内置的,因此环境变量,我们将通过他们var=value command
都浪费了,但我的问题是关于唯一的语法.我的意思是,它们应该被浪费,但是在sh中,当键入时set
,变量以某种方式传递到当前环境中.
set
是一个"特殊"内置,在POSIX规范中定义.
如简单命令中所述,在内置完成后,调用特殊内置实用程序之前的变量赋值仍然有效; 对于常规内置或其他实用程序,情况不应如此.
所以在这种情况下,bash
实际上违反了POSIX规范.但是,在POSIX模式下运行时,其行为与sh
:
$ bash --posix
$ var=value set something
$ echo $var
value
Run Code Online (Sandbox Code Playgroud)