为什么他们有不同的输出?
echo $( (( 5+5 )) )
echo $((( 5+5 )))
10
答案1
bash
在启用的情况下运行命令set -x
:
$ set -x
$ echo $( (( 5+5 )) )
++ (( 5+5 ))
+ echo
$ echo $((( 5+5 )))
+ echo 10
10
$ echo $(( ( 5+5 ) ))
+ echo 10
10
如您所见,$(...)
第一个命令中的 被视为命令替换。此命令替换运行命令((5+5))
。这又是一个没有任何输出的算术评估,因此echo
不会获取任何参数,仅输出换行符。
在另一种情况下(以及我添加的额外情况),$((...))
被视为算术展开式。这会计算 的值(5+5)
并被该计算的结果替换。
为了避免混淆,我建议您使用空格来帮助bash
解析器查看您想要使用的语法分组类型,就像我在上面最后一个命令中所示的那样。