如何为Shell命令设置环境变量

米列鲁瓦

我经常在node.js程序中看到此命令:该命令NODE_ENV=test node app.js将NODE_ENV变量设置为测试并工作。我还在这里阅读https://en.wikipedia.org/wiki/Environment_variable,它适用于任何shell命令,但是我自己运行一些测试,这就是我看到的

$ HELLO="WORLD"
$ HELLO="MARS" echo "$HELLO"
  WORLD
$

我希望这能印出来MARS我在这里缺少什么吗?

怀疑论者

语法VAR=value command意味着将在环境变量VAR设置为的情况下调用该命令VALUE,这仅适用于该命令的范围。

但是,当您使用命令行时:

HELLO="MARS" echo "$HELLO"

shell首先解释该"$HELLO"参数,确定它为WORLD,然后运行其实际作用:

HELLO="MARS" echo "WORLD"

因此,echo可能已HELLO设置变量,但不会影响其打印内容-之前已经对其进行了解释。

在做

HELLO="MARS"; echo "$HELLO"

完全做其他事情。首先将其设置HELLOMARS当前外壳程序,然后继续解释该echo命令。到此时HELLO为止MARS,还没有WORLD但这是完全不同的效果-变量HELLO与值保持不变MARS,而在没有的命令中情况并非如此;

您的问题是,这echo只是演示的不佳选择。您可以进行其他演示来证明HELLO已正确更改:

HELLO="MARS" eval 'echo $HELLO'

在这种情况下,外壳程序将不解释,$HELLO因为它在单引号内的字符串中。它将首先放入MARSHELLO,然后eval 'echo $HELLO'使用该变量集调用eval与当时的命令来运行echo $HELLO,你会得到您所期望的输出。

此语法最适合不使用给定变量作为命令行一部分而是在内部使用的语法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章