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
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