原文: Bash Array – How to Declare an Array of Strings in a Bash Script

Bash スクリプトは、コマンドラインのタスクを自動化できる便利な方法です。

Bash を使用すれば、他のスクリプト言語やプログラミング言語と同じようなことがたくさんできます。変数の作成と使用、ループの実行、条件論理の使用、配列へのデータの格納が可能です。

機能をよく知っていても、Bash の構文は扱いにくいものです。この記事では、配列の宣言方法と、それをコード内で使用する方法について学びます。

Bash で配列を宣言する方法

Bash で配列を宣言するのは簡単ですが、構文に注意してください。他の言語でのプログラミングに慣れていると、見慣れたコードに見えるかもしれません。しかし、見逃しがちな微妙な違いがあります。

配列の宣言は、以下の手順で行います。

  1. 配列に名前をつけます。
  2. その変数名の後にイコール記号を付けます。記号の周りにはスペースを入れてはいけません
  3. 配列を丸括弧で囲みます。(JavaScript のような角括弧は使いません)
  4. 文字列を引用符で囲み、間にカンマを入れずに入力します。

配列の宣言は以下のようになります。

myArray=("cat" "dog" "mouse" "frog")

これだけです!とてもシンプルです。

Bash で配列にアクセスする方法

配列をループする方法には 2 種類あります。要素そのものをループさせるか、インデックスをループさせます。

配列の要素をループする方法

配列の要素をループするには、次のようなコードになります。

for str in ${myArray[@]}; do
  echo $str
done

簡単に説明すると、これは JavaScript で forEach を使うようなものです。配列 (myArray)の中の各文字列 (str) に対して、その文字列をプリントします。

このループの出力は以下のようになります。

cat
dog
mouse
frog

注意: 角括弧内の @ 記号は、配列の全要素をループしていることを表しています。もし、これを省いて for str in ${myArray}  と書くと、配列の最初の文字列だけが表示されます。

配列のインデックスをループする方法

あるいは、配列のインデックスをループできます。これは JavaScript の for  ループのようなもので、各要素のインデックスにアクセスしたい場合に便利です。

この方法を使用するには、以下のようなコードが必要です。

for i in ${!myArray[@]}; do
  echo "element $i is ${myArray[$i]}"
done

出力は以下のようになります。

element 0 is cat
element 1 is dog
element 2 is mouse
element 3 is frog

注意: 変数 myArray の先頭にある ! は、要素そのものではなく、配列のインデックスにアクセスしていることを示しています。これは、! が否定を示すのに慣れていると混乱することがあるので、十分注意してください。

注意2: Bash では通常、変数には波括弧が不要ですが、配列には必要です。つまり、配列を参照するときは ${myArray} という構文になります。しかし、文字列や数値を参照するときは単に $i というドル記号を使用するだけです。

まとめ

Bash スクリプトはコマンドラインの動作を自動化するのに便利です。そして、配列は複数のデータを格納するために使用できる素晴らしいツールです。

宣言して使用することは難しくありませんが、他の言語とは異なるので、間違えないように細心の注意を払いましょう。