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

Unix: Why doesn't env A=42 echo ${A} work?

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

env A=42 echo ${A}

打印 42,但它什么也不显示。我做错了什么?

参数扩展发生在 shell 运行 命令之前。因此,如果 A 当前的值为 3,则命令行首先评估为

env A=42 echo 3

and then shell 标识什么命令是 运行 (env)。此时 env 构建了一个新环境,其中 A 的值为 42,然后 运行 在该环境中执行命令 echo 3

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

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

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