Bash

for(( … )){ … ;} 是有效的 shell 語法嗎?在哪些貝殼中?

  • August 23, 2019

表達方式:

$ 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 ...; donein循環(請參閱原始碼),儘管據我所知從未記錄過。for

所有ksh(從 Bourne shell 派生的原始版本和 ksh93 重寫)、pdksh¹(和衍生產品)、bash(從 1989 年開始)並zsh支持它。我不知道有什麼ash衍生物可以做到。yash也不是,但yash被寫入 POSIX 標準。

zsh1991 年的 2.0 中添加了支持,但作為超出 Bourne 語法的大多數構造的新短格式範圍的一部分。它不僅是for i in 1 2; { ...; },它是for i in 1 2; any-command(及其變體)。它在那裡被記錄下來,並且自推出以來一直存在。

AFAIK,旁邊zsh,只有 pdksh 記錄它(對於兩者forselect)。

至於((init; condition; action))表格,那來自ksh93and 被 andzsh複製bash

that((...)){ ...; }in place都不do ...; done是 POSIX。

另請參閱Bash for 循環中“do”關鍵字的目的是什麼?更多for循環形式。


¹ 不是早期版本,也不是它所基於的 Forsyth shell。它於 1994 年在 5.1.1 中添加,這可能解釋了為什麼它在那裡被記錄

引用自:https://unix.stackexchange.com/questions/536944