bash で指定回数ループする方法のあれこれまとめ
bash で使える方法です。sh では使えません。
while で10回ループ
bash 算術演算のカッコと組み合わせて強いです。
#!/usr/bin/env bash while (( cnt++ < 10 )); do echo $cnt done
break も使えます。
break の導入の if 分も比較演算子を (()) で使えます。
#!/usr/bin/env bash while (( cnt++ < 10 )); do echo $cnt if (( cnt > 5 )) ;then break fi done
for で 10 回ループーC言語スタイル
bash には (()) と for を組み合わせ使えるものがあります。
注意 for 中は$i++
でなく、i++
のようになる
#!/usr/bin/env bash for (( i=0; i< 10 ; i++ )); do echo $i done
for もbreak が使えます。
for で 10回ループ - 展開
JavaScriptなどでおなじみの for .. in ループ
for i in {0...9}; do echo $i if (( i > 5 )) ;then break fi done
seq コマンドを使う。
seq コマンドを使う事もできます。
for i in `seq 0 9` ; do echo $i; done
C言語スタイル
通常のプログラミング言語と同じ for も使える。
for (( idx=0 ; idx<10; idx++ )) ; do echo $idx; done
配列を使って10回ループ
ARR=`seq -s ' ' 0 9 ` for i in $ARR ; do echo $i done
配列は、方法が色々ある。
for-each スタイルだとこんな感じ。
ARR=`seq -s ' ' 0 9 ` for i in ${ARR[@]} ; do echo $i; done for i in ${ARR[*]} ; do echo $i; done for i in $ARR; do echo $i; done
IFS(区切り文字)や文字展開に注意して使う。
配列の添字(インデックス)を使う方法は、後述する。
配列と添字を組み合わせてループ
配列の添字にアクセスする(多分あんまり使わない。)
## 配列を作る ARR=(`seq -s ' ' 1000 1009 `) echo $ARR echo ${ARR[2]} ## 配列にアクセス for (( i = 0; i < ${#ARR[*]}; i++ )) ; do echo "$i => ${ARR[$i]}" done
配列の配列を作ることがあれば使えるけど、現代では配列の配列をするくらいなら、名前付きインデックスを使うほうが手っ取り早い気がする。
名前付きインデックス(連想配列・Dict)を使う
連想配列も使えると便利です。
declare -A MY_ARRAY MY_ARRAY[name]=takuya MY_ARRAY[id]=0001 for key in ${!MY_ARRAY[*]} ; do echo $key = ${MY_ARRAY[$key]} ; done
名前付きインデックスの配列は、各言語によって呼び方が異なると思います。
- 辞書(python / C# )
- 連想配列(php)
- AssocArray(php / bash )
- Object ( javascript )
- ハッシュ(Ruby / Pel )
- Hash(Ruby / Java)
- テーブル(Lua)
- Map マップ( Swift / Java )
bash の場合は、Associated Array / Associative Array と解説サイトで呼ばれるのをよく見かけたので、assoc array がいいと思います。
まとめ
自分でも時々忘れそうになります。再度まとめ直し。
指定回数トライして、成功したら抜ける。みたいなことを書こうとして詰まった
過去記事
bashの似てて紛らわしいもの (( / $(( の丸括弧 - それマグで!
bashで10回ループ(Bashによる指定回ループとファイル名を001にする) - それマグで!
bashの似てて紛らわしいもの (( / $(( の丸括弧 - それマグで!
bashで連想配列(assoc array / hash ) を使う。 - それマグで!
bashの配列のまとめ(定義・代入・参照と取得・ループ) - それマグで!
2022/10/03
for (( i=0; i<0; i++ ))
を追加。
2024-09-01
配列を使ったループに付いて追記。Assoc Arrayについて言及。