a=2
a=3 echo $a #prints 2
有人可以解释为什么有人会在第2行使用上面的代码。 a = 3将被忽略,因为没有"输入"在它之后。 但我在上面的脚本中看到它并且不确定目的。
答案 0 :(得分:4)
$a
之前, a=3
由shell(Bash)扩展。所以echo
将其参数视为2
,这就是它打印的内容。 (如果您set -x
,您可以看到执行的内容是a=3 echo 2
。)
var=val command
用于设置command
在执行期间看到的环境变量,但不在其他地方。因此,当command
读取环境变量时(例如使用getenv()
),$var
为val
。
如果echo
在运行时查找$a
,则其值为3
。
答案 1 :(得分:1)
父进程在设置环境之前展开a
,在该环境中为a
设置不同的值(3)。尽管由a
执行的变量3
设置为echo
,但该值已经扩展。所以为时已晚。
您可以改为:
a=3 bash -c 'echo $a'