質問: for((...)){...;}は有効なシェル構文ですか?どの殻に? 式:$ 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の書き換えの両方)、pdksh1(および派生物)、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で追加され、おそらくそれがそこで文書化された理由を説明しています