Answers:
{ ...; }
在70年代后期,Unix V7的Bourne shell的第一个版本已经代替do ...; done
in for
循环被接受(请参阅源代码),尽管据我所知从未记录过。
所有这些ksh
(都是从Bourne外壳派生而来的,然后是ksh93重写),pdksh
¹(及其派生词)bash
(从1989年开始)并zsh
支持它。我不知道能做到ash
这一点。yash
两者都不是,但yash
已写入POSIX标准。
在中zsh
,1991年在2.0中添加了对support的支持,但作为大多数构造的简短格式的新范围的一部分,它超出了Bourne语法。它不仅for i in 1 2; { ...; }
是它for i in 1 2; any-command
(及其变体)。并且它被记录在那里,并且自引入以来就存在。
AFAIK在旁边zsh
,只有pdksh记录了它(for
和select
)。
至于((init; condition; action))
形式,即来自ksh93
与被复制zsh
和bash
。
既没有((...))
也不{ ...; }
到位do ...; done
是POSIX。
另请参见Bash for loop中“ do”关键字的目的是什么?以获得更多for
循环形式。
¹不是早期版本,也不是它所基于的Forsyth Shell。它是在1994年的5.1.1中添加的,这也许可以解释为什么它在那里被记录了下来。