1

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

TZ=US/Hawaii date

export TZ=US/Hawaii
date

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

test=6 echo $test
4

2 回答 2

5

变量在执行一行中的命令之前被展开。所以在最后一个例子中,$test在赋值完成之前展开。

您可以通过以下方式获得您想要的效果:

test=6 bash -c 'echo $test'

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

于 2013-09-16T17:05:27.387 回答
4

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

(test=6; echo $test)
于 2013-09-16T17:06:08.080 回答