我想弄明白,oneliner怎么样
var=value command
实际上是sh.我希望变量var可以传递给命令环境,但在当前环境中不应该存在(请不要在最后省略免责声明!)
首先,让我们在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
最后一个不同.设置命令是什么样的特殊情况?为什么变量var已保存在我们当前的环境中?
免责声明:我知道echo和set是shell内置的,因此我们通过var = value命令传递的环境变量都被浪费了,但我的问题只是语法.我的意思是,它们应该被浪费掉,但是在sh中,当键入set时,变量以某种方式传递到当前环境中.
解决方法:
As described in Simple Commands, variable assignments preceding the invocation of a special built-in utility remain in effect after the built-in completes; this shall not be the case with a regular built-in or other utility.
所以在这种情况下,bash实际上违反了POSIX规范.但是,在POSIX模式下运行时,它的行为与sh相同:
$bash --posix
$var=value set something
$echo $var
value
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。