Bashで覚えておくとよいデータ構造 - 配列

Bashで必要なデータ構造の覚書です。

配列

配列は複数件のデータを扱うためのデータ構造です。

配列を生成する。

配列の生成は以下のように行います。

配列の名前=()
配列の名前=("データ" "データ" "データ")

配列の生成では、配列の名前を指定します。
もし、生成時にデータを格納する場合に、()内にデータを指定します。


例えば、空の配列ARRAY1を生成するには、以下のように書きます。

ARRAY1=()

例をもう一つ。データを3つ格納した配列ARRAY2を生成するには、以下のように書きます。

ARRAY2=("history" "japanese" "math")
配列にデータを追加する。

配列へのデータの追加は以下のように行います。

配列の名前=("${配列の名前[@]}" "データ")

データの追加では、配列の名前とデータを指定します。
追加するたびに、データは配列の末尾に追加され、配列のサイズが増えます。


例えば、配列ARRAY1にデータを追加するには、以下のように書きます。

ARRAY1=("${ARRAY1[@]}" "give")
ARRAY1=("${ARRAY1[@]}" "gave")
ARRAY1=("${ARRAY1[@]}" "given")
配列にデータを格納する。

配列の特定の位置へのデータの格納は以下のように行います。

配列の名前[インデックス]="データ"

データの格納では、配列の名前とインデックスと格納するデータを指定します。
インデックスとは配列の位置を表す数字で、「0」以上の値を指定する必要があります。


例えば、配列ARRAY2へデータを格納するには、以下のように書きます。

ARRAY2[3]="english"
ARRAY2[4]="science"
配列からデータを取得する。

配列からのデータの取得は以下のように行います。

コマンド ${配列の名前[インデックス]}
変数=${配列の名前[インデックス]}

データの取得では、配列の名前とインデックスを指定します。インデックスの考え方はデータの格納時と同様です。
配列から取得したデータは、関数の引数に渡したり、変数に代入したり、関数の戻り値として返したりできます。


例えば、配列ARRAY1のデータを取得して出力するには、以下のように書きます。

echo ${ARRAY1[0]} => give
echo ${ARRAY1[1]} => gave
echo ${ARRAY1[2]} => given
配列中のすべてのデータに同じ処理をする。

配列中のすべてのデータに同じ処理をするためには、以下のようなfor文を使用します。

for (( I = 0; I < ${#配列の名前[@]}; ++I ))
do
	// ${配列の名前[$I]}を使った処理
done

このfor文中の『${#配列の名前[@]}』は配列のサイズを表します。そのため、このfor文を使えば配列中のすべてのデータに同じ処理を行えます。


例えば、配列ARRAY2中のすべてのデータを表示するには、以下のように書きます。

for (( I = 0; I < ${#ARRAY2[@]}; ++I ))
do
	echo ${ARRAY2[$I]}
done

これは以下のように書いた場合と同じ結果になります。

echo ${ARRAY2[0]} => history
echo ${ARRAY2[1]} => japanese
echo ${ARRAY2[2]} => math
echo ${ARRAY2[3]} => english
echo ${ARRAY2[4]} => science