配列(基本)

bashスクリプトでは配列を使う事ができます。
あまり馴染みの無い方が多いかもしれませんが、ループを使ったテキスト処理などの反復処理では絶大な効果を発揮します。
使い方や使うシチュエーションを考えて、しっかり覚えてバリバリ使いましょう。

要素は以下の様にして定義します。

配列名[添字]=要素

 

A_ARY[0]="a"
A_ARY[1]="b c"
A_ARY[2]="d"

また、まとめて要素を定義する事もできます。
まとめて要素を定義する場合は、要素をグルーピングして記入します。
特に指定しない場合、0から順に定義されます。

配列名=(要素0 要素1 要素2 …)

 

A_ARY=("a" "b c" "d")

配列に格納されている要素の数を出力する場合は以下の様に配列名の前に「#」を付与します。

${#配列名[@]}

配列に格納されている値を参照する時は以下の様にします

${配列名[添字]}

 

echo "${A_ARY[0]}"
echo "${A_ARY[1]}"
echo "${A_ARY[2]}"

ループ処理(for文)でまとめて処理する事もできます。
まとめて処理する場合、入力された要素をスペース区切りで取り出す場合は添字に「*」を入力します。
要素にスペースが含まれる場合は、添字に「@」を入力します。

ここで注意なのですが、「*」を指定してスペース区切り前提で取り出す場合、for文の要素部分に記述する配列名は「"」で括ってはいけません。
括った場合、配列全体を一つの要素として扱ってしまうからです。

逆に、「@」でスペースを含めた要素を取り出す場合、for文の要素部分に記述する配列名は「"」で括らなければいけません。
括らない場合、組込変数「IFS」に指定された区切り文字で区切られた要素が出力されます。

ですので、通常for文で配列を扱う場合、「@」で取り出し、クォーティングを忘れない様にしましょう。
それ以外の取り出し方をすると、想定している物と違う形で値を取り出す羽目になります。

・スペース区切りで要素を処理したい場合

for V_ELEMENT in ${A_ARY[*]}
do
    echo "${V_ELEMENT}"
done

・代入された通りに要素を取り出して処理したい場合

for V_ELEMENT in "${A_ARY[@]}"
do
    echo "${V_ELEMENT}"
done

基本的な配列の使い方は以上です。
次回は具体的な配列の使い方を説明します。