为什么没有'FOO = 42 echo" $ FOO"`在Bash打印42?

时间:2014-03-04 01:58:23

标签: bash environment-variables echo

我对此行为感到困惑:

$ FOO=42 echo "$FOO"

$ FOO=42 && echo "$FOO"
42

我习惯使用VARNAME=value cmd为其他命令指定环境变量,因此我很惊讶地发现cmdecho时它不起作用。这可能与echo内置Bash有关。是这样的吗?如果是这样,使用&&是为Bash内置函数指定环境变量的最佳方法吗?

更新: &&并不好,因为它会导致永久设置环境变量,我正在努力避免这种情况。

2 个答案:

答案 0 :(得分:4)

echo是内置的并不重要。原因是命令行上的变量在执行命令之前被评估,它们不会被命令评估。你可以得到你想要的结果:

FOO=42 bash -c 'echo "$FOO"'

这会启动一个执行echo $foo的新shell。由于bash的参数是单引号,因此变量不会被原始shell替换。

答案 1 :(得分:3)

在命令执行之前发生替换:

  1. $FOO将替换为其当前值。

  2. 执行
  3. echo ""时,$FOO设置为42。

  4. 尝试:

    FOO=42 sh -c 'echo "$FOO"'