for(( ... )){ ... ;} 有効なシェル構文はありますか?どの殻に?

for(( ... )){ ... ;} 有効なシェル構文はありますか?どの殻に?

表現:

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

うまくいきます。

置き換えられるマニュアルには、この構文の説明が見つかりません{...;}; do ...; done

マニュアルに注意事項がありますか?どのシェルで動作しますか?

ベストアンサー1

{ ...; }すでに1970年代後半に、Unix V7のBourneシェルの最初のバージョンでは、do ...; doneループ内の交換が許可されています(参照:forソースコード)私が知っている限り、それは録音されたことがありません。

すべてksh(Bourneシェルから派生した元のバージョンとksh93書き換え)、pdksh1(およびその派生)、bash(1989年以降)zshをサポートします。私はashこれを行うデリバティブを知りません。yashいいえ、しかしyashPOSIX標準に従って書かれています。

サポートは1991年zsh2.0に追加されましたが、Bourne文法を超えて、ほとんどの構文のための一連の新しい短い形式の一部でした。だけでなく、それは(そしてその変形)for i in 1 2; { ...; }です。for i in 1 2; any-command記録もありますそこそしてリリース後

AFAIKはpdkshを除いて、zshpdkshだけがこれを文書化しました(およびforselect

形式は((init; condition; action))andに由来し、ksh93andによってコピーされます。zshbash

それ((...)){ ...; }代替もdo ...; donePOSIXではありません。

また、見ることができますBash for ループで「do」キーワードの目的は何ですか?もっと円形for


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

おすすめ記事