本投稿について
説明すること
- bash で
declare
コマンドを使用して配列や連想配列を宣言する方法 - 配列や連想配列をシェル関数の引数として渡す方法
※declare による名前参照を使用するため bash 4.3 以降でしか動作しません。
説明しないこと
- 配列や連想配列の細かい操作
- 配列、連想配列、名前参照以外の
declare
コマンドの使用方法
使用するコマンド
ここでは declare
コマンドを使用します。
declare
は bash で変数を宣言したり、変数に属性を与えたりするためのコマンドです。
declare
コマンドの使い方は man bash
にて以下のように記載されています。
declare [-aAfFgilnrtux] [-p] [name[=value] ...]
ここで使用するオプションは以下のものです。
オプション | 説明 |
---|---|
-a | 配列変数を宣言 |
-A | 連想配列変数を宣言 |
-n | 変数の名前参照を行う |
-p | 変数の属性と値の表示 |
配列変数、連想配列変数の宣言
bash で declare
コマンドを使用することで配列変数や連想配列変数を宣言することができます。
配列変数の宣言
declare
コマンドを使用して配列宣言をする場合は以下のようにします。
declare -a array=("1" "2" "3")
declare -p
を使用すると変数の内容を表示できます。
declare -p array
結果は以下のように表示されます。
declare -a array=([0]="1" [1]="2" [2]="3")
${array[@]}
で配列の全要素が参照できます。
echo ${array[@]}
結果は以下のように表示されます。
1 2 3
連想配列の宣言
declare
コマンドを使用して配列宣言をする場合は以下のようにします。
declare -A hash=(["a"]="A" ["b"]="B" ["c"]="C")
declare -p
を使用すると変数の内容を表示できます。
declare -p hash
結果は以下のように表示されます。
declare -A hash=([a]="A" [b]="B" [c]="C" )
${hash[@]}
で連想配列の全要素が参照できます。
echo ${hash[@]}
結果は以下のように表示されます。
A B C
${!hash[@]}
で連想配列の全キーが参照できます。
echo ${!hash[@]}
結果は以下のように表示されます。
a b c
配列、連想配列をシェル関数の引数として渡す
シェル関数の引数はコマンドラインと同様の形式で渡されるらしく通常は配列や連想配列を引数として渡すことはできないようです。
ですが、シェル関数内で引数に対して declare -n
を使用して名前参照することで引数に渡した配列や連想配列をシェル関数内で参照することが可能となります。
ここでは先ほど宣言した連想配列 hash
を使用します。
※配列の場合は同様のため説明しません。
# 第1引数を連想配列として参照し各要素の値を表示する関数
print_hash_val()
{
declare -n ref=$1
for val in ${ref[@]};
do
echo "val = $val"
done
}
# 連想配列変数を宣言
declare -A hash=(["a"]="A" ["b"]="B" ["c"]="C")
# シェル関数を呼び出して hash の各要素を表示
print_hash_val hash
結果は以下のように表示されます。
val = A
val = B
val = C