我经常在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"
完全做其他事情。首先将其设置HELLO
为MARS
当前外壳程序,然后继续解释该echo
命令。到此时HELLO
为止MARS
,还没有WORLD
。但这是完全不同的效果-变量HELLO
与值保持不变MARS
,而在没有的命令中情况并非如此;
。
您的问题是,这echo
只是演示的不佳选择。您可以进行其他演示来证明HELLO
已正确更改:
HELLO="MARS" eval 'echo $HELLO'
在这种情况下,外壳程序将不解释,$HELLO
因为它在单引号内的字符串中。它将首先放入MARS
中HELLO
,然后eval 'echo $HELLO'
使用该变量集调用。在eval
与当时的命令来运行echo $HELLO
,你会得到您所期望的输出。
此语法最适合不使用给定变量作为命令行一部分而是在内部使用的语法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句