bashの配列は複数の値をまとめて扱うための仕組みです。
ログ処理、ファイル一覧の操作、複数サーバへの処理など、実務では for 文と組み合わせて使う場面が非常に多くなります。
この記事では、配列の基本、展開方法 、値の追加・変更・削除、for 文との組み合わせの流れでまとめています。
配列の基本
bash の配列は次のように定義します。
names=("taro" "jiro" "saburo")スペース区切りで複数の値を入れられます。
配列の展開
配列内の各要素には0から始まるインデックスが付けられ、次のように参照します。
echo "${names[0]}" # taro
echo "${names[1]}" # jiro
echo "${names[2]}" # saburo全要素は次のように展開できます。
echo "${names[@]}" # taro jiro saburo要素数の取得方法です。
echo "${#names[@]}" # 3インデックス一覧を取得する方法です。
echo "${!names[@]}" # 0 1 2値の追加・変更・削除
要素の追加方法です。
names+=("shiro")
echo "${names[@]}" # taro jiro saburo shiro指定した要素の変更方法です。
names[1]="jiro_updated"
echo "${names[@]}" # taro jiro_updated saburo要素の削除方法です。
一旦要素をunsetコマンドで要素を削除した後にインデックスを詰め直す必要があります。
インデックスを詰め直すのは、「要素削除で自動的に詰める」機能がないため、unsetするとインデックスが欠番になるからです。
names=("taro" "jiro" "saburo")
# unsetコマンドで対象要素[1]を削除する
unset 'names[1]' # 実行後インデックスは「0 2」の歯抜け状態になる# 配列に要素を再設定し、インデックスを詰め直す
names=("${names[@]}")
echo "${!names[@]}" # 0 1。インデックスは詰め直される配列と for 文の組み合わせ
配列を使う最大のメリットは、for 文でまとめて処理できる点です。
やり方は複数ありますが、先ずは配列を展開して処理する方法です。
names=("taro" "jiro" "saburo")
for name in "${names[@]}"; do
echo "$name"
done実行結果:
taro
jiro
saburo次はインデックスを使った処理方法です。
インデックス番号も併せて取得したい時におすすめです。
names=("taro" "jiro" "saburo")
for i in "${!names[@]}"; do
echo "index: $i, value: ${names[$i]}"
done実行結果:
index: 0, value: taro
index: 1, value: jiro
index: 2, value: saburo最後はC言語風なfor文です。
他言語で慣れている方におすすめです。二重丸括弧(( ))であることに注意してください。
names=("taro" "jiro" "saburo")
for ((i = 0; i < "${#names[@]}"; i++)); do
echo "${names[i]}"
done実行結果:
taro
jiro
saburo

コメント