繁体   English   中英

一行设置环境变量和执行命令,在sh和bash中得到不同的结果

[英]One line setting environment variable and execute command, got different results in sh and bash

我想弄明白,oneliner怎么样

var=value command

实际上是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"
.

目前,它按预期工作。 但是当我们去sh并重新输入相同的输入时,它会是这样的:

#sh
$ var=
$ var=value echo something
. something
$ echo "$var"
.

$ var=value set something
$ echo "$var"
. value

最后一个不同。 set命令是什么样的特殊情况? 为什么变量var已保存在我们当前的环境中?

免责声明:我知道echoset是shell内置的,因此我们通过var=value command传递的环境变量都被浪费了,但我的问题只是语法。 我的意思是,它们应该被浪费掉,但是在sh中,当键入set ,变量以某种方式传递到当前环境中。

set是一个“特殊”内置函数,在POSIX规范中定义。

如简单命令中所述,在内置完成后,调用特殊内置实用程序之前的变量赋值仍然有效; 对于常规内置或其他实用程序,情况不应如此。

所以在这种情况下, bash实际上违反了POSIX规范。 但是,在POSIX模式下运行时,它的行为与sh相同:

$ bash --posix
$ var=value set something
$ echo $var
value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM