了解 "let" 命令
Understanding the "let" command
来自 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。最后我们将 1
添加到 b
。我希望输出为 1 - 1 - 0
。但是,由于输出是 4 - 2 - 0
,在我看来 $((a = 1))
是第一个执行的语句。有人可以解释为什么会这样吗?
您的教程说明 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.
。
S 首先处理所有其他扩展(具有 $(something)
的子外壳),然后将结果文本计算为算术表达式。
bash 在传递给命令之前解析给定的参数。在这种情况下,$()
部分会在初始解析期间进行评估。 a
的值设置为 1 并且整个部分替换为 1。因此 let
看到:
b = a (a += 3) + 1, b++
and a is already 1 before that executes.
来自 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。最后我们将 1
添加到 b
。我希望输出为 1 - 1 - 0
。但是,由于输出是 4 - 2 - 0
,在我看来 $((a = 1))
是第一个执行的语句。有人可以解释为什么会这样吗?
您的教程说明 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.
。
S 首先处理所有其他扩展(具有 $(something)
的子外壳),然后将结果文本计算为算术表达式。
bash 在传递给命令之前解析给定的参数。在这种情况下,$()
部分会在初始解析期间进行评估。 a
的值设置为 1 并且整个部分替换为 1。因此 let
看到:
b = a (a += 3) + 1, b++
and a is already 1 before that executes.