Answers:
{ ...; }在70年代后期,Unix V7的Bourne shell的第一个版本已经代替do ...; donein 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中添加的,这也许可以解释为什么它在那里被记录了下来。