env
手册页说明它将设置指定的环境变量,然后运行指定的命令。知道了,我希望
env A=42 echo ${A}
打印42
,但它没有显示任何内容。我做错了什么?
答案 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