ループ: for と while... 基本以上。私のコードに微妙な違い/利点/欠点がありますか? [閉鎖]

ループ: for と while... 基本以上。私のコードに微妙な違い/利点/欠点がありますか? [閉鎖]

私は過去1年間に比較的複雑なコードを書く/整理しながらbashを学びました。私のコードは、複雑なマルチレベルのwhileループを含む関数でいっぱいです。私は最近forループについてもっと学びました。 C ++との類似性と構文に従うのがより簡単であることを除いて、他のものよりも1つを使用することに長所/短所があるかどうか疑問に思います。

私の主な考慮事項は、実行時間とマルチレベルループとの互換性です。私のスクリプトの関数(合計5つ)は10,000〜800,000回繰り返すことができ、強力なシステムでプロセス全体を完了するのに12〜48時間かかります。また、全体的な類似性のため、一般的なフォーラム/ウェブサイトでは言及されていませんが、複雑なコードに何らかの方法で影響を及ぼす可能性があるfor/while間の他の可能な違いにも興味があります。たとえば、1つはループの前にすべてのプロセス(および空きメモリ)を完了しますが、もう1つはそうではありませんか?または、ループ内で呼び出されたC ++プログラムと対話します。

以下は、whileループを使用するさまざまな方法を示す2つの関数コード構造の簡単な例です。

一つ:

var1="1"; var1max=${length}
while IFG=read -r var1lineFULL; do
    var1line=`echo ${var1lineFULL} | cut -f 1`
    var2="1"; var2max=${length2}
    while [ ${var2} -le ${var2max} ]; do
        sedvar=`sed -n ${var2}p < file.txt`
        wait; <c++ executable command>
        <more commands (bash/c++), if statements, echoing, verbose options...>
        let var2=var2+1
     done
     let var1=var1+1
done < anotherfile.txt

2:

var1="1"
var3="1"; var3max=`cat thirdfile.txt | wc -l`
while [ ${var3} -le ${var3max} ]; do
     while IFS=read -r var3line; do
          wait; <fickle c++ executable command>
          <bash commands.. if, echo, awk, cut, etc.>
          let var3=var3+3
     done < thirdfile.txt
     let var1=var1+1
done

これが従うのに十分な意味があることを願っています。注:これらのループは機能します。ループが実行される回数と出力ファイル名の一部を決定する整数を増やす必要がある方法でループを作成しました。彼らはまた多くのテキスト行を生成しますが、私はそれをテキストログに「3&>」として入れました。

だからあなたはどう思いますか?増分配置は変更されませんが、「for」に切り替える理由はありますか?これをしない理由はありますか?時差による疲労は発生しますか?

ベストアンサー1

処理する静的ファイルの数を繰り返すなど、ループの前に繰り返す回数がわかっている場合は、forループを使用する必要があります。これはforループがうまくいくことです。確かではなく、アキュムレータを特定の値で埋める一種の繰り返し集計アルゴリズムや特定の値が見つかった場合、ループを終了する検索アルゴリズムなど、処理中に発生する状況によってループが異なる場合、it探している値を入力してからwhileループを使用してください。

あなたの場合は、繰り返し回数を知って固定値だけカウンタを増やすので、forループを使用する必要があります。

おすすめ記事