Bashの配列変数とは?宣言・追加・削除・参照の方法を実例付きで解説
以前、Bashにおける変数の基本的な使い方について解説しました。本記事ではその発展編として、Bashの配列(array)変数について詳しく説明し、実際に使えるサンプルコードも交えて紹介します。
配列とは何か
配列とは、複数の値をひとつの変数で保持できる変数の型です。値のリストとして扱うことができ、ループ処理で各要素を順番に取り出しながら、個別に操作を行えます。
例えば、複数のファイルに対して同じ処理を実行したい場合を考えてみましょう。ファイル名のリストを配列として保存しておけば、ループで各ファイル名を取り出し、それぞれに同じ操作を適用できます。
配列の各要素にはインデックス(添字)が割り当てられており、位置は0から始まる数字で表されます。
なお、Bashの配列では、要素が連続したインデックスである必要はありません。例えば、インデックス0、3、17にだけ値が存在し、その間が空でも問題ありません。
Bashの配列についてさらに詳しく知りたい場合は、Linux Documentation Projectのドキュメントを参照するとよいでしょう。
Bash配列の作成方法
Bashの配列には、パス、文字列、数値など、あらゆる種類のBash変数を格納できます。さらに、他の配列を格納することさえ可能です。
なお、シェルスクリプトでファイルパスを扱う場合は、スペースを含むパスによるトラブルを防ぐため、必ずダブルクォートで囲むことをおすすめします。
配列の宣言方法はいくつかあります。以下、順に見ていきましょう。
間接宣言(Indirect Declaration)
配列要素に直接値を代入することで、配列を暗黙的に作成する方法です。代入と同時に、配列とその要素が自動的に生成されます。
ARRAYNAME[INDEX]=VALUE
例:
#!/bin/bash peopleArray[3]="Tom"
この例では、新しく作成されたpeopleArrayのインデックス3に「Tom」が代入され、同時に配列peopleArrayが自動的に(間接的に)作成されます。
明示的な宣言(Direct Declaration)
declareコマンドを使って配列を定義することもできます。
declare -a ARRAYNAME
例:
declare -a peopleArray
この例では、空の配列peopleArrayが作成されます。
複合代入による作成(Compound Assignment)
最もよく使われるのがこの方法です。初期値を設定した状態で配列を作成できます。
ARRAYNAME=(value1 value2 ...)
丸括弧 () の中に配列の値をスペース区切りで並べます。スペースを含む値はクォートで囲みましょう。
例:
peopleArray=("Tom" "Bill" "Theodore Baker Sr.")
配列への値の代入
配列の末尾に新しい値を追加する
配列に値を追加するには、+=を使ってインデックスを指定せずに代入します。
ARRAYNAME+=(VALUE)
例:
peopleArray+=("Tony")
配列内の値を置き換える
既存の値を置き換えるには、その値が格納されているインデックスを指定して上書きします。
例えば、インデックス7にある値を置き換えたい場合は、次のように記述します。
peopleArray[7]="Tony"
配列から値を削除する
unsetコマンドに配列のインデックスを指定すると、その要素を削除できます。
unset ARRAYNAME[INDEX]
例:
unset peopleArray[1]
この例では、配列peopleArrayの2番目の要素(インデックス1)が削除されます。
配列の値へのアクセス
配列の値を参照する際は、必ず波括弧(中括弧)で囲む必要があります。波括弧がないと、Bashは配列のインデックスを含む角括弧を正しく解釈できません。
echo ${ARRAYNAME[INDEX]}
例:
#!/bin/bash
peopleArray=("Tom" "Bill" "Theodore Baker Sr.")
echo ${peopleArray[0]}
このスクリプトの出力結果は以下の通りです。
Tom
一方、最終行を次のように波括弧なしで記述した場合はどうなるでしょうか。
echo $peopleArray[0]
この場合、$peopleArrayが先に展開されて最初の要素「Tom」となり、残りの[0]が文字列としてそのまま出力されるため、結果は「Tom[0]」となり、意図した動作になりません。配列を扱う際は、波括弧を忘れないようにしましょう。
配列のループ処理
配列で最もよく行われるのは、ループ処理によって各要素に順番に操作を加えることです。for文と${配列名[@]}を組み合わせれば、全要素を簡単に処理できます。
#!/bin/bash
peopleArray=("Tom" "Bill" "Theodore Baker Sr.")
for name in "${peopleArray[@]}"; do
echo "Hello, $name!"
done
ループ処理の詳細については、以前公開したBashのループ処理に関する記事もあわせてご覧ください。
-
Linuxのwatchコマンドの使い方と実用例をわかりやすく解説
Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行
-
【完全ガイド】Excel VBAでテーブルを参照する方法20選
大量のデータを扱うExcelブックでは、セル範囲全体を指定するよりも、テーブルを名前で参照する方がはるかに便利です。そして、あらゆる操作を高速・確実・効率的に実行するには、VBA(Visual Basic for Applications)の活用が最適な手段となります。本記事では、「Excel VBAでテーブルを参照する方法」について、実践的な20のサンプルコードを使いながら徹底的に解説します。基本から応用まで順を追って学び、ぜひ日々の業務に役立ててください。 ListObjectプロパティでテーブルを参照する基礎知識 VBAのコード内でExcelのテーブルを参照する際に使われるのがList