本当に愚かな質問がありますが、確かに確認したかったです。また、次のコードを使用して内部でテストしました。
for x in ${!test_array[@]}
do
echo hey
done
だから私の質問は、明らかにfor
配列が空の場合、ループは「実行中」と「完了」の間のすべての項目を無視することです。テストしましたが、配列が空の場合はecho hey
実行されません。つまり、スクリプトはdo ..
内部で何もしませんdone
。配列に1つ以上の要素がある場合は、配列が実行されますecho hey
。
私の理解が正しいことを確認したいと思います。私のテストによると、確かにそうです。
答え1
あなたの理解は正しいです。 forループはdo
との間のコードを実行します。done
~のためすべてのアイテム性格。中に何もない場合性格それでは循環することはありません。
しかし省略するとマロ全体的に位置パラメータを介して繰り返されます。
例えば
$ set -- one two
$ for f; do echo $f; done
one
two
バラより3.2.5.1 ループ構造
答え2
はい、そうです。こう考えてみてください。あなたが子供パーティーにいて、青いシャツを着たすべての子供たちがクッキーを受け取る必要があると私が言った場合、青いシャツを着た子供がいない場合、あなたは絶対にクッキーボトルを開けないでしょう。
ここでは、配列の各要素に対して何かを行うようにシェルに指示します。要素がないのでループに入ることもありません。