Zshには連想配列があります。基本的な使い方:
% typeset -A map # 連想配列型を定義
% echo ${(t)map} # mapの型を表示
association # 連想配列の型はassociation
% map=(a 10 b 20) # mapの定義、(key1 val1 key2 val2)のようにする
% echo $map
10 20 # 値のみが表示される
% echo $map[a] # key(a)に対応するvalue(10)が表示される
10
% echo ${(k)map} # (k)は連想配列のkeyの一覧を取得するフラグ
a b
ここで(t),(k)は変数展開フラグと呼ばれるもので、
より詳しくはzshの本6.7節で解説されている。
さらにパターンも記述できる:
% map=("a*" 10 "b*" 20) # keyにパターンを記述できる
% echo ${(k)map}
b* a*
% echo $map[abcd] # そのままではパターンマッチを行わない
% echo $map[(k)abcd] # keyの部分に(k)を使用するとマッチを行う
10
% echo $map[(k)bcd]
20
こちらの(k)は添字用変数展開フラグと呼ばれ、
パターン(上述の"a*, b*")にマッチするキーの値を返す。
変数展開フラグ(上述)の(k)とは異なるので注意