【Shell】シェル ~ 基本編 / 連想配列 - ディクショナリ ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/08/11/000000

の続き。

今回は、連想配列を扱う。

目次

【1】連想配列 - ディクショナリ
【2】構文
 1)定義方法
 2)キーが存在しているか確認
【3】サンプル
 例1:Hello world
 例2:キーの存在チェック
【4】使用上の注意

【1】連想配列 - ディクショナリ

* 連想配列(Associative arrays)
 => Pythonでいうdict。JavaでいうMapみたいなキー・値型
 => 詳細は以下のサイトを参照。

https://www.atmarkit.co.jp/ait/articles/1906/05/news004.html

【2】構文

1)定義方法

* 「declare -A <連想配列名>」で定義する。
 => -A : 連想配列 Associative arraysを意味している

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

# 存在する場合、True
if [ -n "${array["<key>"]}" ]; then
    echo "Exist"
fi

# 存在しない場合、True
if [ -z "${array["<key>"]}" ]; then
    echo "Not exist"
fi

【3】サンプル

例1:Hello world

#!/bin/bash

declare -A dict;

for((i=0; i<10; i++))                                                      
do
  echo ${i}
  dict["${i}"]="Hello - ${i}"
done

echo "************"

for key in ${!dict[@]};
do
  # キーを取得
  echo $key
   # 値を取得
  echo ${dict[$key]}
done

例2:キーの存在チェック

#!/bin/bash

# -A : 連想配列(Associative arrays)を定義
declare -A COUNTRIES;

COUNTRIES=(
  ["jp"]="Japan"
  ["us"]="United States of America"
)

echo "Result = ${COUNTRIES['jp']}"

# 存在する場合、True
if [ -n "${COUNTRIES['jp']}" ]; then
    echo "JP Exists"
fi

# 存在しない場合、True
if [ -z "${COUNTRIES['uk']}" ]; then
    echo "UK Not exist"
fi

【4】使用上の注意

* パイプを使ったループして、
 連想配列に値を設定するには、ひと手間必要。

パイプを使ったループで連想配列に値を設定する
https://dk521123.hatenablog.com/entry/2021/09/23/223401

参考文献

https://qiita.com/YutaSaito1991/items/c7c6bacb916f41ef1471

関連記事

シェル ~入門編~
https://dk521123.hatenablog.com/entry/2014/10/23/005406
シェル ~ 基本編 / 配列 ~
https://dk521123.hatenablog.com/entry/2021/08/11/000000
シェル ~ 基本編・構文全般 ~
https://dk521123.hatenablog.com/entry/2015/02/20/001600
シェル ~ 基本編・条件分岐 if / case ~
https://dk521123.hatenablog.com/entry/2015/05/01/000043
シェル ~ 基本編・ループ while / for etc ~
https://dk521123.hatenablog.com/entry/2021/08/09/000000
シェル ~ 基本編・関数 ~
https://dk521123.hatenablog.com/entry/2015/03/17/233124
シェル ~ 基本編・引数あれこれ ~
https://dk521123.hatenablog.com/entry/2021/07/11/000421
シェルで部分一致(前方一致・後方一致)
https://dk521123.hatenablog.com/entry/2020/09/01/000000
shoptコマンド
https://dk521123.hatenablog.com/entry/2021/09/12/000000
リダイレクト・パイプライン
https://dk521123.hatenablog.com/entry/2021/09/13/000000
パイプを使ったループで連想配列に値を設定する
https://dk521123.hatenablog.com/entry/2021/09/23/223401