Bash
for(( … )){ … ;} 是有效的 shell 語法嗎?在哪些貝殼中?
表達方式:
$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}' 0 1 2 3 4
工作正常。
{...;}
我在手冊中找不到替換 the的這種語法的描述; do ...; done
。手冊中有參考嗎?對於哪些 shell 可以正常工作?
{ ...; }
在 70 年代末期的 Unix V7 的第一個版本的 Bourne shell 中已經被接受代替do ...; done
in循環(請參閱原始碼),儘管據我所知從未記錄過。for
所有
ksh
(從 Bourne shell 派生的原始版本和 ksh93 重寫)、pdksh
¹(和衍生產品)、bash
(從 1989 年開始)並zsh
支持它。我不知道有什麼ash
衍生物可以做到。yash
也不是,但yash
被寫入 POSIX 標準。在
zsh
1991 年的 2.0 中添加了支持,但作為超出 Bourne 語法的大多數構造的新短格式範圍的一部分。它不僅是for i in 1 2; { ...; }
,它是for i in 1 2; any-command
(及其變體)。它在那裡被記錄下來,並且自推出以來一直存在。AFAIK,旁邊
zsh
,只有 pdksh 記錄它(對於兩者for
和select
)。至於
((init; condition; action))
表格,那來自ksh93
and 被 andzsh
複製bash
。that
((...))
和{ ...; }
in place都不do ...; done
是 POSIX。另請參閱Bash for 循環中“do”關鍵字的目的是什麼?更多
for
循環形式。¹ 不是早期版本,也不是它所基於的 Forsyth shell。它於 1994 年在 5.1.1 中添加,這可能解釋了為什麼它在那裡被記錄