我正在研究"for loop in bash"的语法。这是用于循环的语法之一
for (( i=0; i<4; i++ )); do echo $i; done
我试着把"在for循环中有新行时,它会给我一个错误(我只能在"do"或echo之后添加新行(。即
for (( i=0
i<4
i++ ))
do echo $i; done
为什么我们需要有一个尾部和尾部空白进行算术扩展?背后的原因是什么?
谢谢。
为什么我们需要有一个尾部和尾部空白来进行算术扩展?
因为这是bash中for
的替代形式的语法。它需要;
。仍然:
for ((i=0;
i<4;
i++)); do
很好。
请注意,无论何处为";"出现在命令语法的描述中,它可能被一个或多个换行取代
不"其中"-在case
内部时,不能用两个换行符替换;;
。在命令列表中时,;
可能会被换行符替换:
列表中可能会出现一个或多个换行符的序列来分隔命令,相当于分号
((...))
是bash扩展,不是命令列表,所以,嗯,不存在。
这看起来像是我的疏忽。提交一份错误报告。如果你包括一个补丁,它可能会进入;你永远不会知道。
它使语言不一致,并导致文档说谎,这就足够了。
然而,有一个小问题,因为不幸的是,像以下这样的构造目前是允许的:
# note lack of backslash line continuations
$ for (( i =
> 0 ; i <
> 5 ; i++ )) ; do echo $i ; done
0
1
2
3
4
如果您想使用一个或多个换行符来替换所需的分号,那么任何地方都允许使用换行符这一事实会产生歧义。
扩展允许任意空白的原因可能是$(( ))
算术扩展做到了这一点:
$ echo $((
> 2
> +
> 2
> ))
4
for (( ))
中包含的三个表达式仅遵循算术展开语法。