来自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))
是第一个执行的语句。有人可以解释为什么会这样吗?
答案 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),然后将结果文本计算为算术表达式。