开发者社区> 问答> 正文

为什么“ var = value echo $ var”不发出值?

想验证我对这些情况为何表现不同的理解:

我认为发生#1的原因是,赋值和echo在shell中作为单个命令运行,并且在执行echo时未设置$ SOME_VAR(shell在执行之前扩展了所有变量)。

#1

$ unset SOME_VAR
$ SOME_VAR=abcdef  echo $SOME_VAR # prints nothing

我认为发生#2是因为赋值和echo在同一shell中作为两个单独的命令运行,并且在执行echo时在shell中设置了$ SOME_VAR。

#2

$ unset SOME_VAR
$ SOME_VAR=abcdef   ; echo $SOME_VAR
abcdef

展开
收起
祖安文状元 2020-01-05 19:02:39 617 0
1 条回答
写回答
取消 提交回答
  • 发生示例1是因为变量扩展首先发生。在这种情况下,事件的顺序为:

    展开$SOME_VAR(到一个空字符串) 设置SOME_VAR于abcdef 调用echo(无参数,因为$SOME_VAR扩展为空字符串) 正如您所说,示例2的发生是因为命令是分别运行的。

    发生示例3 SOME_VAR是因为将其设置为abcdef在调用之前./test.sh,并且它./test.sh是运行环境的一部分。这实际上是该成语的目的VAR=value command。您希望command能够使用VAR,但不一定要让其他命令或子shell都可以看到它。

    发生示例4 SOME_VAR是因为它是当前外壳程序中的局部变量,并且尚未被export-ed以便子外壳程序可以使用它。

    然后,示例5将是:

    unset SOME_VAR
    export SOME_VAR=abcdef ; ./test.sh # prints abcdef
    
    2020-01-05 19:02:50
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载