for((…)){…;}は有効なシェル構文ですか?どのシェルで?


21

式:

$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4

正常に動作します。

私はここでこの構文の説明を見つけるに失敗{...;}交換され; do ...; done、手動でを。

マニュアルに参照はありますか?どのシェルで正常に機能しますか?


回答:


30

{ ...; }70年代後半のUnix V7のBourneシェルの最初のバージョンではdo ...; doneforループの代わりに既に受け入れられていました(ソースコードを参照)が、私の知る限り文書化されていません。

すべてksh(Bourneシェルから派生した元のものとksh93の書き換えの両方)、pdksh¹(および派生物)、bash(1989年の初めから)、およびzshそれをサポートします。ash派生するものは知りません。yashどちらでもありませんがyash、POSIX標準に書かれています。

zsh、サポートは1991年に2.0で追加されたが、ボーンの構文を超えて、ほとんどの構築物についての短い形式の新しい範囲の一部として。それだけでなくfor i in 1 2; { ...; }、それfor i in 1 2; any-command(およびその変形)です。そして、それが文書化されてそこその導入以来の

私の知る限り、横にzsh(両方のための、唯一のpdkshの文書、それをforしてselect)。

((init; condition; action))来て、フォーム、ksh93およびコピーされたzshbash

それ((...))も、{ ...; }代わりにdo ...; donePOSIX もありません。

参照してくださいループのバッシュで「やる」というキーワードの目的は何ですか?より多くのforループ形式のため。


¹以前のバージョンや、それが基づいているForsythシェルではありません。1994年に5.1.1で追加され、おそらくそこに文書化された理由を説明しています


1
うわー、Bourne氏は70年代のソースコードでcプリプロセッサの使用を完全に受け入れました。
デジタル外傷
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.