forループのコマンドは反復に影響しますか?

forループのコマンドは反復に影響しますか?

バッシュでは

  1. Cに似たforループの構文は次のとおりです。

    for (( expr1 ; expr2 ; expr3 )) ; do commands ; done
    

    の実行が3つの算術式、および/またはcommandsの計算に影響を与え、反復回数(例:反復回数)が変わりますか?expr1expr2expr3

    それとも、繰り返し(例えば、繰り返し回数)がcommands各繰り返しの実行に影響を受けませんか?

  2. for コマンドの他の構文は次のとおりです。

    for name [ [in [words ...] ] ; ] do commands; done
    

    各反復の実行はcommands反復回数(例:反復回数)に影響しますか?

答え1

確かに:

$ bash -c 'for ((i=0;i<10;i++)); do echo $i; ((i++)); done'
0
2
4
6
8

for ((expr1; expr2; expr3)フォーム内expr2(および失敗がないexpr3場合)は、ループが実行されるたびに評価されます。expr2他の形式では、bashはwordsアンローリング(コマンドの置き換え、ワイルドカードの実行などを含む)の後にループを開始します。したがって、nameループが開始されると、反復変数()の可能な値に影響を与えることはできません。もちろんあなたはできます:

$ bash -c 'for i; do echo $i; break; done' _ a b c
a

関連情報