Bashシェルで連想配列を使う

シェルを使ってみている今日この頃. 連想配列はシェルでは無理だろうと思っていたが, シェルならではの方法で実現できることがわかった.

#!/usr/bin/env bash

MAP_key1="value1"
MAP_key2="value2"
MAP_key3="value3"

for key in key1 key2 key3; do
    val=$(eval 'echo $MAP_'$key)
    echo "$key => $val"
done

とする. ここでMAPは自分の好きな連想配列の名前にすれば良い.

key1 => value1
key2 => value2
key3 => value3

のような出力が得られる. 実際にはただMAP_key1のような変数を定義しているだけだが, evalを使って名前を結合することでMAP[key1]="value1"とするのと同等の結果が得られる.

なるほどシェルも奥が深いのだなと思った.

http://yanor.net/wiki/?%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%2F%E6%96%87%E6%B3%95%2F%E9%85%8D%E5%88%97%EF%BC%88%E9%80%A3%E6%83%B3%E9%85%8D%E5%88%97%EF%BC%89