bash代码中的行延续规则?
为什么可以 写为:bash代码中的行延续规则?,bash,Bash,为什么可以 写为: for (( expr1 ; expr2 ; expr3 )) do commands done 其中,do命令可以写入两行而不会出错,而 for (( expr1 ; expr2 ; expr3 )) do commands done 会错吗 在bash中延续到下一行的一般规则是什么?谢谢。这样想吧 for (( expr1 ; expr2 ; expr3 )) ; ... 将无法工作,因为现在它是两个独立的命令 for (( expr1 ; expr2
for (( expr1 ; expr2 ; expr3 ))
do commands
done
其中,do命令
可以写入两行而不会出错,而
for (( expr1 ; expr2 ; expr3 ))
do
commands
done
会错吗
在bash中延续到下一行的一般规则是什么?谢谢。这样想吧
for (( expr1 ;
expr2 ; expr3 )) ; ...
将无法工作,因为现在它是两个独立的命令
for (( expr1 ; expr2
; expr3 ))
及
这两个都不是完整的命令,因此将导致错误
鉴于
; expr3 ))
评估为
do
commands
done
这和
do (nothing)
commands
done
do;commands
done
这和
do (nothing)
commands
done
do;commands
done
由于在do之后可以放置多个命令,因此第一行被视为空命令。正如您可以在循环之外的单独命令之间保留行一样
注:我意识到这个答案有点含糊不清,所以如果有人理解我的意思以及如何清理它,那么请放心:)我不知道是否有关于在shell中使用换行符的“一般规则”。但是,显式标记(它是bash等shell的基础)显式标记显式换行是命令一部分的位置。这些措施包括:
- 在
复合列表之前或之后,这就是为什么它可以紧跟在
,(
(用于启动复合命令时),{
,do
,elif
,else
,for
,if
,然后
和直到
,紧跟在while
和之前)
(用于终止复合命令时) - 在
之后,&&
或|
|
- 在列表中的语句之间,或在
或之后
在列表中分隔语句&
- 在
或for
语句中的case
之前
- 在
语句的子句中,在子句或case
开头的模式之后代码>终止它
- 也许我错过了其他一些上下文:)
Posix语法没有为((expr;expr;expr))语法定义
,该语法来自ksh93
,并在v2.04中并入bash
。但是,在该构造中,分号是语法的一部分,用于分隔算术表达式,而不是语句。由于这些分号不是语句分隔符,因此不能用换行符替换。然而,bash
确实允许它们后面跟着换行符。我想不出太多的语言会允许在for
语句中使用回车符……虽然后面的反斜杠总是可以用来允许换行符……我本打算参考本节中关于这一点的内容,但实际上找不到信息技术这是for循环语法还是bash语法?不管怎样,问题是内部代码>不是语句分隔符,而是语法分隔符。因此,你不能像在其他地方用分号那样用换行符替换换行符。@EtanReisner:我认为该语法是在ksh93中引入的,但它从来不是Posix的一部分$(…)和(…)出现在最初的ksh,iirc中,但只有$(…)
将其放入Posix中(尽管Posix认识到Shell可能实现(…)
…列出了在2.04-devel中实现的功能,注释上写着“ksh93”。所以我想这是一个确认。