for((…)){…;}是有效的shell语法吗?在哪个贝壳里?


Answers:


30

{ ...; }在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记录了它(forselect)。

至于((init; condition; action))形式,即来自ksh93与被复制zshbash

既没有((...))也不{ ...; }到位do ...; done是POSIX。

另请参见Bash for loop中“ do”关键字的目的是什么?以获得更多for循环形式。


¹不是早期版本,也不是它所基于的Forsyth Shell。它是在1994年的5.1.1中添加的,这也许可以解释为什么它在那里被记录了下来。


1
哇,伯恩先生在70年代的源代码中完全接受了c预处理器的使用。
Digital Trauma
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.