加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 00:54:25 所属栏目:Linux 来源:网络整理
导读:我想弄明白,oneliner怎么样 var=value command 实际上是sh.我希望变量var可以传递给命令环境,但在当前环境中不应该存在(请不要在最后省略免责声明!) 首先,让我们在bash中尝试一下 #bash$var= #just to be sure it's empty$var=value echo something. someth
我想弄明白,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时,变量以某种方式传递到当前环境中.

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读