我对此行为感到困惑:
$ FOO=42 echo "$FOO"
$ FOO=42 && echo "$FOO"
42
我习惯使用VARNAME=value cmd
为其他命令指定环境变量,因此我很惊讶地发现cmd
为echo
时它不起作用。这可能与echo
内置Bash有关。是这样的吗?如果是这样,使用&&
是为Bash内置函数指定环境变量的最佳方法吗?
更新: &&
并不好,因为它会导致永久设置环境变量,我正在努力避免这种情况。
答案 0 :(得分:4)
echo
是内置的并不重要。原因是命令行上的变量在执行命令之前被评估,它们不会被命令评估。你可以得到你想要的结果:
FOO=42 bash -c 'echo "$FOO"'
这会启动一个执行echo $foo
的新shell。由于bash
的参数是单引号,因此变量不会被原始shell替换。
答案 1 :(得分:3)
在命令执行之前发生替换:
$FOO
将替换为其当前值。
echo ""
时,$FOO
设置为42。
尝试:
FOO=42 sh -c 'echo "$FOO"'