如何解决请注意,只要在命令语法的描述中出现“;”,它都可以替换为一个或多个换行符
我正在查看“ bash中的for循环”的语法。这是使用for循环的语法之一
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
。在list of commands内时,;
可以用换行符代替:
一个或多个换行符序列可能会出现在列表中以分隔命令,等同于分号
((...))
是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 (( ))
中包含的三个表达式仅遵循算术扩展语法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。