Bash配列のループ処理:コード解説
Bashにおいて、配列は複数の値を一つの変数に格納するためのデータ構造です。これらの値を順に処理したい場合は、ループを使用します。
配列の定義
配列は以下のように定義します:
配列名=(値1 値2 値3 ...)
例えば:
fruits=("apple" "banana" "orange")
forループによる配列の処理
最も一般的な方法は、forループを使用することです:
for fruit in "${fruits[@]}"
do
echo "$fruit"
done
このコードでは、fruits
配列の各要素がfruit
変数に代入され、ループ内で処理されます。
インデックスを使用したループ
配列のインデックスを使用してループすることもできます:
for i in "${!fruits[@]}"
do
echo "${fruits[$i]}"
done
この場合、i
はインデックスを表し、fruits[$i]
で対応する要素にアクセスします。
配列の長さ
配列の長さは、以下のように取得できます:
配列の長さ=${#配列名[@]}
length=${#fruits[@]}
echo "配列の長さ: $length"
注意
- 配列の要素にスペースが含まれる場合は、ダブルクォート(
"
)で囲む必要があります。 - 配列のインデックスは0から始まります。
Bash配列のループ処理:コード解説
コード例1: forループによる処理
fruits=("apple" "banana" "orange")
for fruit in "${fruits[@]}"
do
echo "$fruit"
done
fruits=("apple" "banana" "orange")
: 配列fruits
を定義し、要素として "apple"、"banana"、"orange" を格納します。for fruit in "${fruits[@]}"
:fruits
配列の各要素を順にfruit
変数に代入し、ループを開始します。echo "$fruit"
: 現在のループでのfruit
の値を出力します。
コード例2: インデックスを使用したループ
fruits=("apple" "banana" "orange")
for i in "${!fruits[@]}"
do
echo "${fruits[$i]}"
done
echo "${fruits[$i]}"
: インデックスi
に対応するfruits
配列の要素を出力します。
コード例3: 配列の長さを取得
fruits=("apple" "banana" "orange")
length=${#fruits[@]}
echo "配列の長さ: $length"
length=${#fruits[@]}
:fruits
配列の長さをlength
変数に格納します。echo "配列の長さ: $length"
: 配列の長さを出力します。
コード例4: Cスタイルのforループ(類似)
fruits=("apple" "banana" "orange")
for ((i=0; i<${#fruits[@]}; i++))
do
echo "${fruits[$i]}"
done
for ((i=0; i<${#fruits[@]}; i++))
: Cスタイルのforループ構文を使用し、インデックスi
を0から配列の長さ未満まで1ずつ増やします。
注意:
- ダブルクォート (
"
) は、配列要素や変数の展開時にスペースや特殊文字を適切に処理するために重要です。 [@]
は配列の全ての要素を参照し、[*]
も同様ですが、異なる状況で異なる挙動を示すことがあります。
whileループによる処理
Bashでは、whileループも配列の要素を処理するために使用できます。
fruits=("apple" "banana" "orange")
i=0
while [ $i -lt ${#fruits[@]} ]
do
echo "${fruits[$i]}"
((i++))
done
i=0
: インデックス変数i
を初期化します。while [ $i -lt ${#fruits[@]} ]
:i
が配列の長さ未満である間ループを続けます。((i++))
: インデックスi
をインクリメントします。
Cスタイルのforループ(類似)
先述しましたが、Cスタイルのforループも使用できますが、Bashのforループとは異なる構文です。
fruits=("apple" "banana" "orange")
for ((i=0; i<${#fruits[@]}; i++))
do
echo "${fruits[$i]}"
done
配列展開を利用したループ
Bashの配列展開を利用して、直接ループすることもできますが、通常はforループの方が読みやすいです。
fruits=("apple" "banana" "orange")
for fruit in "${fruits[@]}"
do
echo "$fruit"
done
この方法は、基本的には最初のコード例と同じですが、配列展開を利用している点が異なります。
繰り返し処理関数
Bashには、繰り返し処理を行うための組み込み関数はありませんが、関数を作成してループ処理をカプセル化することができます。
function loop_through_array() {
local array=("$@")
for item in "${array[@]}"
do
echo "$item"
done
}
fruits=("apple" "banana" "orange")
loop_through_array "${fruits[@]}"
この関数は、引数として受け取った配列を処理し、各要素を出力します。
注意事項
- whileループやCスタイルのforループは、インデックスを管理する必要があるため、forループよりも冗長になる可能性があります。
- 配列展開を利用したループは、シンプルですが、複雑な処理には適さない場合があります。
- 関数を利用することで、コードの再利用性と可読性を向上させることができます。
arrays bash shell