bash手册列出了for复合语句的语法
for name [ [ in [ word ... ] ] ; ] do list ; done
这意味着do如果in省略该子句,前面的分号是可选的.[笔记2].
但是,Posix规范仅列出以下三个产品for_clause:
for_clause : For name linebreak do_group
| For name linebreak in sequential_sep do_group
| For name linebreak in wordlist sequential_sep do_group
;
Run Code Online (Sandbox Code Playgroud)
作为参考,linebreak是一个可能为空的序列,NEWLINEwhile sequential_sep是分号或a NEWLINE,可能后跟一个序列NEWLINE:
newline_list : NEWLINE
| newline_list NEWLINE
;
linebreak : newline_list
| /* empty */
;
separator : separator_op linebreak
| …Run Code Online (Sandbox Code Playgroud)