Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2914

bashで連想配列

$
0
0

連想配列のセット

連想配列宣言

変数を連想配列として扱うには、変数宣言で-Aオプションを利用します。

連想配列の宣言
declare-A musics

初期セット

連想配列の宣言と同時に連想配列のセットも同時に行う場合は()で囲みます。

連想配列初期セット
declare-Amusics=(["ultra soul"]="2001"["OCEAN"]="2005"["BANZAI"]="2004"["RED"]="2015"["GIFT"]="2008")

連想配列の追加

連想配列の追加は以下のような指定します。

連想配列追加
musics["ARIGATO"]="2004"

連想配列の値変更

連想配列の値を変更する場合は、追加と同じ書き方になります。

連想配列の値変更
declare-Amusics=(["OCEAN"]="2005")
musics["OCEAN"]="2005"

連想配列の削除

連想配列に設定したものを削除する場合は、unsetを利用します。

連想配列の削除
unset musics["GIFT"]

連想配列の表示

指定したキーの値を取得

連想配列から指定したキーの値を取得する場合は${連想配列変数["キー"]}のように指定します。

指定したキーの値を取得
echo"${musics["ultra soul"]}"

設定されている配列数を数える

連想配列に設定されている配列の数を数える場合は${#連想配列変数[@]}のようにします。

指定したキーの値を取得
echo"count:${#musics[@]}"

キーが存在しているか確認

連想配列に指定したキーが存在するか確認する場合は、if文に-nオプションまたは-zオプションを利用してキーを利用して連想配列から取り出せるかを確認します。

キーが存在する場合処理
declare-Amusics=(["ultra soul"]="2001")if[-n"${musics["ultra soul"]}"];then
    echo"exist"fi
if[-n"${musics["GIFT"]}"];then
    echo"not exist"fi# existのみが表示される
キーが存在しない場合処理
declare-Amusics=(["ultra soul"]="2001")if[-z"${musics["ultra soul"]}"];then
    echo"exist"fi
if[-z"${musics["GIFT"]}"];then
    echo"not exist"fi# not existのみが表示される

連想配列ループ

キーを表示する

連想配列にセットされているキーをループして表示する。
${!連想配列名[@]}を利用します。

キーを表示
declare-Amusics=(["ultra soul"]="2001"["OCEAN"]="2006")for music in"${!musics[@]}";do
    echo"${music}"done# 処理結果# ultra soul# OCEAN

値を表示する

連想配列にセットされている値をループして表示する。
${連想配列名[@]}を利用します。!マークをつけないのがポイントです。

キーを表示
declare-Amusics=(["ultra soul"]="2001"["OCEAN"]="2006")for music in"${musics[@]}";do
    echo"${music}"done# 処理結果# 2001# 2006

キーと値を同時に表示する

連想配列にセットされているキーと値のセットを同時に表示する場合は、キーを表示する時のループを利用して取り出します。

キーを表示
declare-Amusics=(["ultra soul"]="2001"["OCEAN"]="2006")for music in"${!musics[@]}";do
    echo"${music}:${musics[${music}]}"done# 処理結果# ultra soul:2001# OCEAN:2005

上記全てをまとめた結果

以上で終わりですが、上記をまとめたshellを乗せておきます。

#!/bin/bash# setdeclare-Amusics=(["ultra soul"]="2001"["OCEAN"]="2006"["BANZAI"]="2004"["RED"]="2015"["GIFT"]="2008")

musics["ARIGATO"]="2004"
musics["OCEAN"]="2005"unset musics["GIFT"]# readecho"${musics["ultra soul"]}"echo"count:${#musics[@]}"echo"# -n option"if[-n"${musics["ultra soul"]}"];then
    echo"exist"fi
if[-n"${musics["GIFT"]}"];then
    echo"not exist"fi

echo"# -z option"if[-z"${musics["ultra soul"]}"];then
    echo"exist"fi
if[-z"${musics["GIFT"]}"];then
    echo"not exist"fi# forecho"# for key loop"for music in"${!musics[@]}";do
    echo"${music}"done

echo"# for value loop"for music in"${musics[@]}";do
    echo"${music}"done

echo"# for key/value loop"for music in"${!musics[@]}";do
    echo"${music}:${musics[${music}]}"done
実行結果
2001
count:5
#-n option
exist
#-z option
not exist
#for key loop
OCEAN
ARIGATO
BANZAI
ultra soul
RED
#for value loop
2005
2004
2004
2001
2015
#for key/value loop
OCEAN:2005
ARIGATO:2004
BANZAI:2004
ultra soul:2001
RED:2015

Viewing all articles
Browse latest Browse all 2914

Trending Articles