やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

bashの連想配列(宣言・操作)

 ${Human[Name]}みたいなヤツ。

成果物

記法

定義

コード 意味
declare -A 名前=([キー]=値 [キー]=値 ...) 連想配列
declare -Ar 名前=([キー]=値 [キー]=値 ...) 連想配列(readonly)
unset 名前[キー] 指定した連想配列のキーと値を削除する
unset 名前 指定した連想配列を削除する

参照

コード 意味
${名前[キー]} 指定した連想配列のキーにおける値を取得する
${#名前[@]} 指定した連想配列の要素数を取得する
${!名前[@]} 指定した連想配列のキー一覧を取得する(スペース区切)

コード抜粋

Reference() {
    #declare -A Human=([Name]=Andy [Age]=20)
    declare -Ar Human=([Name]=Andy [Age]=20)

    echo "KeyCount: ${#Human[@]}"
    echo "Keys: ${!Human[@]}"
    for  key in ${!Human[@]}; do echo "${Human[$key]}"; done;
}
DestructiveOperation() {
    declare -A Human=([Name]=Andy [Age]=20)

    # 要素を追加する
    Human[Address]=Japan
    for  key in ${!Human[@]}; do echo -n "$key: ${Human[$key]}, "; done;
    echo ''

    # 要素に代入する
    Human[Age]=99
    for  key in ${!Human[@]}; do echo -n "$key: ${Human[$key]}, "; done;
    echo ''

    # 指定要素を削除する
    unset Human[Address]
    for  key in ${!Human[@]}; do echo -n "$key: ${Human[$key]}, "; done;
    echo ''

    # 全削除(定義ごと)
    unset Human
    [[ -v Human ]] && echo 'Humanは定義済み。' || echo 'Humanは未定義。'
}
Run

対象環境

  • Raspbierry pi 3 Model B+
  • Raspbian stretch 9.0 2018-11-13
  • bash 4.4.12
$ uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux