理解“let”命令

时间:2015-10-21 21:22:31

标签: bash arithmetic-expressions

来自this tutorial我正在查看第一个示例,但无法弄清楚为什么b将被设置为2

$ let 'b = a' "(a += 3) + $((a = 1)), b++"
$ echo "$a - $b - $?"
4 - 2 - 0

根据我的理解,let从左到右评估命令。因此,b=a会被评估,但由于a一开始是空白的,因此评估为0,我已经用

进行了测试
$ let 'b=a'
$ echo $b
0

接下来,a += 3,由于a为空,评估为3,但我们添加$((a = 1)),我似乎在设置a最后我们将1添加到b。我希望输出为1 - 1 - 0。但是,由于输出为4 - 2 - 0,我觉得$((a = 1))是第一个执行的语句。有人可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

bash在传递给命令之前解析给定的参数。在这种情况下,在初始解析期间评估$()部分。 a的值设置为1,整个部分替换为1.所以let看到:

b = a (a += 3) + 1, b++
在执行之前,

和a 已经 1。

答案 1 :(得分:0)

您的教程说明Remember that inside arithmetic evaluation contexts, all other expansions are processed as usual (from left-to-right), and the resulting text is evaluated as an arithmetic expression. 因此,首先处理所有oter扩展(具有$(something)的子shell),然后将结果文本计算为算术表达式。