サイトアイコン スグブログ

【シェルスクリプト】連想配列のやり方を教えます!注意点と共にご教示

sweets

シェルスクリプトで配列については理解したけど、連想配列についてわからないといった悩みはないでしょうか?

基本的には配列と同じですが、連想配列と配列の違いなども教えます。

連想配列ならではの設定や格納や参照など、1つ1つを例のshellscriptを用いて現役エンジニアの筆者が教示いたします。

windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。

この記事を1つ1つ理解すれば、読み終わる頃には連想配列についてマスターできます。

シェルスクリプトの配列と連想配列の違い

シェルスクリプトで配列と連想配列の違いとして、配列のインデックスが数字に対して、連想配列のインデックスはキーで指定します。

シェルスクリプトの配列についてまだ理解していない人は、以下にまとめていますので参照ください。

キーは自分で好きにつける事が可能な文字列です。

一般的なスクリプトではマップや辞書などと呼ばれる事もあります。

では連想配列の基礎から行っていきます。

シェルスクリプトの連想配列の基礎

連想配列の宣言のやり方

まずは連想配列を作成する時に宣言をします。シェルスクリプトで連想配列の宣言は下のコマンドで可能です。

declare -A 連想配列名

配列の時は宣言は必須ではありませんでしたが、連想配列では宣言は必須です。ここが配列との違いですので気を付けてください。

連想配列の確認方法

連想配列の値やキーを確認する方法を知っておきましょう!以下にまとめます。

連想配列の確認コマンド2選
  • ${連想配列名[@]}・・・連想配列のの全てを表示できます。
  • ${!連想配列名[@]}・・・連想配列のキーの全てを表示できます。

連想配列を初期化する方法

以前使用した連想配列があれば、予期せぬ結果になりかねませんので連想配列を初期化する方法も覚えておきます。

declare -A 連想配列名=()

空白の連想配列を作成するイメージです。

連想配列での値の格納方法

では連想配列に値を格納する方法を教えます。シェルスクリプト構文は以下です。

連想配列名=([キー1]=値1 [キー2=値2 ...)

連想配列名の後に「=」を記入して、その後に「()」を記入します。※すべてスペースなしで記入

その中にキーと値を入力します。

キーは[]で囲みます、そこに「=」を入力して値を記入します。※スペースなしで記入

複数格納する場合はスペースで区切り、同じ様に格納していきます。

実践:連想配列で値をの格納してみる

では実際に連想配列に値を格納してみます。

declare -A my_association_array1=([id]=5 [name]=yamada)

このように宣言と連想配列の値格納を1行で行う事も可能です。

my_association_array1が連想配列という宣言と、それに値を格納しました。

下のシェルスクリプトを実行して確認してみます。

declare -A my_association_array1=([id]=5 [name]=yamada)
echo ${my_association_array1[@]}
echo ${!my_association_array1[@]}

シェルスクリプトの実行結果は以下となりました。

yamada 5
name id

1行目で値が、2行目でキーが全て表示されました。

表示の順序は入力した順とは限らないので注意です。

連想配列での値の参照方法

では連想配列に入れた値を参照する方法です。

${連想配列名[キー]}

これでキーに対する値を参照する事ができます。

実践:連想配列で値を参照してみる

では実際に連想配列の値を参照してみます。

declare -A my_association_array1=([id]=5 [name]=yamada)
echo ${my_association_array1[name]}

my_association_array1の連想配列にキー「id」と「name」に対する値を格納し、キーが「name」の値を参照します。

シェルスクリプトを実行して確認してみます。

yamada

キーが「name」の値の「yamada」が表示され、連想配列の参照ができています。

連想配列に新規キーと値を格納する

連想配列に新規のキーと値を入れる方法です。

連想配列名[新規キー]=新規値

これで新規にキーと値を格納できます。

実践:連想配列に新規キーと値を格納してみる

では実際に連想配列の値を参照してみます。

declare -A my_association_array1=([id]=5 [name]=yamada)
my_association_array1[country]=Japan
echo ${my_association_array1[@]}
echo ${!my_association_array1[@]}

my_association_array1の連想配列に新規キー「country」と値「Japan」を格納します。

シェルスクリプトを実行して確認してみます。

yamada 5 Japan
name id country

新規キー「country」と、新規値の「Japan」が、追加表示されている事がわかります。

連想配列の値を修正する

連想配列の値を修正する方法です。既存のキーに対して値を格納すると上書き保存されます。

実践:連想配列の値を修正してみる

では実際に連想配列の値を修正してみます。

declare -A my_association_array1
my_association_array1=([id]=1 [name]=yamada)
echo ${my_association_array1[name]}

my_association_array1の連想配列の「name」キーに「yamada」という値が格納されています。

シェルスクリプトを実行して確認してみます。

yamada

下のように既存キー「name」に新規値の「tanaka」を格納しています。

my_association_array1[name]=tanaka
echo ${my_association_array1[name]}

更にシェルスクリプトを実行して確認してみます。

tanaka

「yamada」から「tanaka」に値が修正されました。

連想配列のキーの値を削除する

連想配列のキーを削除する方法です。

unset 連想配列名[キー]

実践:連想配列のキーの値を削除してみる

では実際に連想配列のキーを削除してみます。

declare -A my_association_array1
my_association_array1=([id]=1 [name]=yamada)
echo ${my_association_array1[@]}

my_association_array1の連想配列に「id」と「name」キーがあります。

シェルスクリプトを実行して確認してみます。

yamada 1

キーに対応する値の「yamada」と「1」が表示されています。

下のように「name」キーを削除してみます。

unset my_association_array1[name]
echo ${my_association_array1[@]}

更にシェルスクリプトを実行して確認してみます。

1

キー「name」の値の「yamada」が削除されているのがわかります。

連想配列の要素数を数える

連想配列の要素数を数える方法です。

${#連想配列名[@]}

連想配列名の前に「#」をつけるだけで、要素数を数える事ができます。

実践:連想配列の要素数を数えてみる

では実際に連想配列の要素数を数えてみます。

declare -A my_association_array1
my_association_array1=([id]=1 [name]=yamada)
echo ${#my_association_array1[@]}

my_association_array1の連想配列に「id」と「name」キーがあります。

シェルスクリプトを実行して確認してみます。

2

連想配列の要素数「2」が表示されています。

まとめ:シェルスクリプトの連想配列

配列と連想配列の違いはキーも自分で決めた文字列で指定する。また明示的に連想配列と宣言する事です。

連想配列の宣言のやり方

declare -A 連想配列名

連想配列の宣言と格納を一気にする方法

declare -A 連想配列名=([キー1]=値1 [キー2=値2 ...)

連想配列の全要素数を表示する方法

連想配列の確認コマンド2選
  • ${連想配列名[@]}・・・連想配列のの全てを表示できます。
  • ${!連想配列名[@]}・・・連想配列のキーの全てを表示できます。

連想配列を参照する方法

${連想配列名[キー]}

連想配列に新規キーと値を格納する方法

連想配列名[新規キー]=新規値

連想配列の値を修正する方法

連想配列名[既存キー]=新規値

連想配列のキーの値を削除する方法

unset 連想配列名[キー]

連想配列の要素数を数える方法

${#連想配列名[@]}
連想配列を理解した人

連想配列のやり方とまとめました。

モバイルバージョンを終了