「シェルスクリプトの基礎 - 配列」の版間の差分

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

202行目: 202行目:
  key  : fuga
  key  : fuga
  value : 30
  value : 30
</syntaxhighlight>
<br><br>
== 連想配列の値の変更 ==
連想配列において、既存のキーを指定して値を代入する場合は値の変更、新しいキーを指定して値を代入する場合は値の追加となる。<br>
<br>
<syntaxhighlight lang="sh">
#!/bin/sh
declare -A array
array["hoge"]=10
array["piyo"]=20
array["fuga"]=30
for KEY in ${!array[@]}
do
    echo "key  : $KEY"
    echo "value : ${array[$KEY]}"
done
echo "== Change =="
array["hoge"]=400  #キーhogeの値の変更
array["piyo"]=500  #キーpiyoと値の追加
for KEY in ${!array[@]}
do
    echo "key  : $KEY"
    echo "value : ${array[$KEY]}"
done
# 出力
key  : hoge
value : 10
key  : piyo
value : 20
key  : fuga
value : 30
==change==
key  : hoge
value : 400
key  : piyo
value : 500
key  : fuga
value : 30
</syntaxhighlight>
<br><br>
== 連想配列に値をまとめて代入 ==
連想配列に値をまとめて代入する場合、<code>配列名=([キー]=値 [キー]=値)</code>のように、キーと値のペアで代入する。<br>
連想配列の末尾にキーと値を追加する場合は、<code>+=</code>を使用して<code>配列名+=([キー]=値 [キー]=値)</code>と記述する。<br>
<syntaxhighlight lang="sh">
# 連想配列arrayを定義
declare -A array
# 連想配列arrayに値を代入
array=(["hoge"]=10 ["piyo"]=20 ["fuga"]=30)
for KEY in "${!array[@]}"
do
    echo "$KEY ${array[$KEY]}"
done
# 連想配列arrayの末尾にキーと値をまとめて代入
array+=(["hoge"]=15 ["foo"]=40)
for KEY in "${!array[@]}"
do
    echo "$KEY ${array[$KEY]}"
done
# 出力
hoge 10
piyo 20
fuga 30
piyo 20
fuga 30
hoge 15  # キーhogeの値が変更される
foo 40  # キーfooと値が追加される
</syntaxhighlight>
<br><br>
== 連想配列のコピー ==
連想配列のコピーは、個々のキーと値をコピーする必要がある。<br>
なお、この方法は、連想配列ではない通常の配列にも使用できる。<br>
<syntaxhighlight lang="sh">
declare -A array1
declare -A array2
# 連想配列array1の定義
array1["NG"]="red"
array1["OK"]="green"
# 連想配列array2に連想配列array1をコピー
for i in ${!array1[@]}
do
    array2[$i]=${array1[$i]}
done
echo ${array1[@]}      # array1のキーと値(redとgreen)が表示される
echo ${array2[@]}      # 上と同じ内容が表示される
echo ${!array1[@]}    # 連想配列array1のキー(NGとOK)が表示される
echo ${!array2[@]}    # 上と同じ内容が表示される
echo ${array1["NG"]}  # redが表示される
echo ${array2["OK"]}  # greenが表示される
declare -a week1  # 通常の配列week1を定義
declare -a week2  # 通常の配列week2を定義
week1=(Sun Mon Tues Wed Thur Fri Sat)
# 通常の配列のコピー
for i in ${!week1[@]}
do
    week2[$i]=${week1[$i]};
done
echo ${week1[@]}
echo ${week2[@]}
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>