HOWTO · Bash

Bash の多次元配列

このチュートリアルでは、Bash の多次元配列について説明します。

多次元配列は、どのプログラムにとっても非常に重要な要素です。 主に、データのテーブル ビューを作成するため、および他の多くの目的で使用されます。

この記事では、2 次元配列を作成する方法について説明します。 また、必要な例と説明を使用してトピックについて説明します。

ここでは、2つの異なる方法について説明します。

Bash で多次元配列を宣言する基本的な方法

これは、多次元配列を作成する最も基本的な方法です。 以下の例では、非常に基本的な 2 次元配列を作成します。

以下は、この例のコードです。

ArrayOfArray_1=("Alen" "24")
ArrayOfArray_2=("Walker" "31")
MainArray=(
  ArrayOfArray_1[@]
  ArrayOfArray_2[@]
)

ArrayLength=${#MainArray[@]}
for ((i=0; i<$ArrayLength; i++))
do
  name=${!MainArray[i]:0:1}
  age=${!MainArray[i]:1:1}
  echo "Name : ${name}"
  echo "Age : ${age}"
done

上記のコードは、ArrayOfArray_1ArrayOfArray_2 という名前の 2つの異なる配列を宣言したことを示しています。 その後、メインの配列を宣言しました。その要素は、最近宣言したこれら 2つの配列です。

次に、ループの配列の長さを計算しました。 ループ内で、メイン配列にインデックスを付けて、これら 2つのサブ配列からデータを抽出します。

最後に、最終結果を echo します。 スクリプトを実行すると、以下のような出力が得られます。

Name : Alen
Age : 24
Name : Walker
Age : 31

Bash で連想配列を使用して 2 次元配列を宣言する

この方法は少し複雑です。 このメソッドでは、連想配列という名前の特別な Bash スクリプト配列について説明します。

連想配列は、文字列値をキーまたはインデックスとして格納できる特別な配列です。 他のプログラミング言語と同じです。

連想配列を宣言するための一般的な構文は、declare -A ArrayName です。

以下の例では、5つの行と 6つの列を含む 2D 配列を作成します。 以下は、この例のコードです。

declare -A Array2D
RowNum=5
ColumnNum=6

for ((i=1;i<=RowNum;i++)) do
    for ((j=1;j<=ColumnNum;j++)) do
        Array2D[$i,$j]=$RANDOM
    done
done

f1="%$((${#RowNum}+1))s"
f2=" %9s"

printf "$f1" ''
for ((i=1;i<=RowNum;i++)) do
    printf "$f2" $i
done
echo

for ((j=1;j<=ColumnNum;j++)) do
    printf "$f1" $j
    for ((i=1;i<=RowNum;i++)) do
        printf "$f2" ${Array2D[$i,$j]}
    done
    echo
done

上記の例では、Array2D という名前の連想配列を宣言しました。

その後、2つの変数を作成し、整数値を割り当てました。 この整数値は、行と列の数を指定します。

次に、配列を乱数で埋めるネストされたループを作成しました。

これで、配列の宣言と整理が完了しました。 2D 配列がどのように見えるかを見てみましょう。

コードに見られるように、いくつかのループを使用してこれを行います。 上記のスクリプトを実行すると、次のような出力が表示されます。

           1         2         3         4         5
 1     16700      5241      2599     24330      1662
 2     23264     19557     10425     13413     25606
 3     17987      4199     13598     23897     26734
 4     24420     27830     24855      8165     13531
 5     15495     18790     13347     12947     11826
 6     23458     22838       137     32454     32441

この記事のコードはすべて Bash で記述されています。 Linux シェル環境でのみ動作します。