Unix:为什么不用env A = 42 echo $ {A}工作?

时间:2016-07-13 13:50:34

标签: bash echo env

env手册页说明它将设置指定的环境变量,然后运行指定的命令。知道了,我希望

env A=42 echo ${A}

打印42,但它没有显示任何内容。我做错了什么?

2 个答案:

答案 0 :(得分:5)

参数扩展在shell运行命令之前发生。因此,如果function MyPlugin(param1, param2) { ... } MyPlugin.prototype.usefullMethod = function() {...}; MyPlugin.prototype.anotherUserfullMethod = function(someParam) {...}; 当前具有值3,则命令行首先被评估为

A

然后 shell标识要运行的命令(env A=42 echo 3 )。此时env构造一个新的环境,其中env的值为42,然后在该环境中运行命令A

答案 1 :(得分:5)

这是因为${A}echo执行之前被评估。这意味着echo在前一个环境中获得A值的参数(没有值...)。

一种解决方案是将参数作为文字字符串(单引号)传递,以便在稍后阶段与echo一起展开:

user@host:~$ env A=42 bash -c 'echo ${A}'
42