为什么 bash 不在算术扩展中进行括号扩展?

为什么 bash 不在算术扩展中进行括号扩展?

我有一个关于 bash 语法的问题。bash 手册第 3.5 节中这样说:

扩展的顺序是:括号扩展;波浪号扩展、参数和变量扩展、算术扩展和命令替换(以从左到右的方式完成);单词拆分;和文件名扩展。

以下是链接:https://www.gnu.org/software/bash/manual/bash.html#Shell-Expansions

现在,这些命令按照我的预期执行:

$ echo 0 +{1..5}
0 +1 +2 +3 +4 +5

$ echo $((0 +1 +2 +3 +4 +5))
15

因此我认为这个命令应该产生与第二个命令相同的结果:

echo $((0 +{1..5}))

但是,我却收到这个错误:

bash: 0 +{1..5}: syntax error: operand expected (error token is "{1..5}")

这是为什么?难道它不应该先进行内部括号扩展,然后再像第二条命令那样计算算术扩展吗?

注意:我并没有想做什么特别的事情。我只是想了解 bash 的工作原理。

相关内容