Bash:在同一行上分配变量而不改变回声行为

时间:2016-01-26 16:25:43

标签: bash

a=2
a=3 echo $a     #prints 2

有人可以解释为什么有人会在第2行使用上面的代码。  a = 3将被忽略,因为没有"输入"在它之后。 但我在上面的脚本中看到它并且不确定目的。

2 个答案:

答案 0 :(得分:4)

在评估$a之前,

a=3由shell(Bash)扩展。所以echo将其参数视为2,这就是它打印的内容。 (如果您set -x,您可以看到执行的内容是a=3 echo 2。)

var=val command用于设置command 在执行期间看到的环境变量,但不在其他地方。因此,当command读取环境变量时(例如使用getenv()),$varval

如果echo在运行时查找$a,则其值为3

答案 1 :(得分:1)

父进程在设置环境之前展开a ,在该环境中为a设置不同的值(3)。尽管由a执行的变量3设置为echo,但该值已经扩展。所以为时已晚。

您可以改为:

a=3 bash -c 'echo $a'