• ベストアンサー

forとwhileの区別の仕方

リナックスのシェルで, forとwhileの区別がいまひとつ理解ができません。 イメージで何かいいアイデアがあれば、 お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

全然違うじゃないと思ったのですが、bash拡張の for((expr1; expr2; expr3)) とwhileの比較の話なんでしょうか。元々、シェルのforは、 (1) シェルスクリプトの引数を順に処理する for i;do echo "<<$i>>";done (2) 単語の並びを順に処理する for i in *.c;do cp $i back/$i;done の2パターンでしたので、whileとの使い分けは明確でした。 その後、C言語からの輸入の形でbashにfor((expr1; expr2; expr3)) の形式が出来ました。わかりにくいということあれば、この新しい形式のforは一切使わないことにすればわかりやすいのではないでしょうか。数字を1から100までとかの場合だけに限定するとか。 もし、C言語をご存知なら、Cでの基準と同じにすればいいし。

keiyan999
質問者

補足

ご返答ありがとうございます。 forは順々に繰り返しを実行し、 whileは、条件式が真であれば、 ぐるぐる回っているということでしょうか?

その他の回答 (2)

  • m_mik
  • ベストアンサー率26% (31/117)
回答No.2

自分の例で申し訳ないですが… forはループ変数の初期値設定、ループ変数に関連する条件、ループ値の変化という形で組めるループで使用しています。 対してwhileは初期値が付近の処理では設定されていない場合のループ(既に設定されている値を使用する場合)や、ループ値の変化が見えない場合のループ(他のところで値を変化させる場合)に使用しています。 また、forには単語リストによるループという特殊な使い方もあります。 test='abc def ghi jkl' for TANGO in $test ; do →こうすると、TANGO変数に abc,def,ghi,jklと入ってきます。

noname#22222
noname#22222
回答No.1

カーニハン&リッチーによれば、「for 自体はループであり、while の一般化になっている」ということです。 リナックスのシェルにも、このCの規定が当てはまると思います。 まあ、for が犬ならば while はハスキーというイメージじゃないでしょうか?

関連するQ&A