式:
$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4
正常に動作します。
マニュアルで{...;}
が; do ...; done
を置き換えているこの構文の説明が見つかりません。
マニュアルに参考資料はありますか?どのシェルでそれが正しく機能しますか?
{ ...; }
は、70年代後半のUnix V7のBourne Shellの最初のバージョンのfor
ループでdo ...; done
の代わりにすでに受け入れられていました( ソースコード)を参照 =)しかし、私の知る限りでは文書化されていません。
すべてのksh
(Bourne Shellから派生した元の1つと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
(およびそのバリエーション)でもあります。そして、それは there と その導入以来ずっと と文書化されています。
AFAIKは、zsh
のほかに、pdkshのみがそれを文書化します(for
とselect
の両方)。
((init; condition; action))
フォームについては、ksh93
から取得され、zsh
およびbash
によってコピーされました。
((...))
の代わりに{ ...; }
もdo ...; done
もPOSIXではありません。
for
ループ形式の詳細については、 Bash forループの「do」キーワードの目的は何ですか? も参照してください。
earlier以前のバージョンや、それが基づいているForsythシェルではありません。それは1994年の5.1.1で追加され、おそらくそれがそこで文書化された理由を説明しています