env
手册页说它将设置指定的环境变量,然后运行指定的命令。知道这一点,我期待
env A=42 echo ${A}
打印42
,但它不显示任何内容。我做错了什么?
参数扩展发生在 shell 运行命令之前。因此,如果A
当前具有值 3,则命令行首先计算为
env A=42 echo 3
然后外壳确定要运行的命令(env
)。此时,env
构造一个新环境,其中 A
的值为 42,然后在该环境中运行命令echo 3
。
这是因为在执行echo
之前会评估${A}
。这意味着 echo 在以前的环境中获得一个值为 A
的参数(没有值...
一种解决方案是将参数作为文字字符串(单引号)传递,以便在稍后阶段与echo
一起扩展:
user@host:~$ env A=42 bash -c 'echo ${A}'
42