为什么'test = 6 echo $ test'命令在bash中不起作用?

时间:2013-09-16 17:00:58

标签: bash scope

我遇到了这个简洁的命令来检查bash中任何时区的时间

TZ=US/Hawaii date

相同
export TZ=US/Hawaii
date

第一个命令如何工作,而以下命令不起作用?

test=6 echo $test

2 个答案:

答案 0 :(得分:5)

在执行行中的命令之前,会扩展变量。因此,在最后一个示例中,$test在分配完成之前进行了扩展。

您可以获得所需的效果:

test=6 bash -c 'echo $test'

这会执行一个新的shell进程。由于引用了参数,原始shell不会扩展变量,子shell会在设置$test的环境中展开变量。

答案 1 :(得分:4)

首先,对date的调用使用放在其环境中的TZ值。在第二个中,$test的扩展由shell 在实际运行 echo之前执行。 test环境中echo的值无关紧要。一个接近等效的工作将是

(test=6; echo $test)