bashとzshで連想配列

shellの中で連想配列を使ってみたかったので備忘録。bashzshで試してみたけど、結果にちょっと違いがあった。

bashの場合

$ declare -A hoge
$ hoge["A"]="a"
$ hoge["B"]="b"
$ echo ${hoge}

$ echo ${hoge["A"]}
a
$ echo ${hoge["B"]}
b
$ unset hoge
$ echo ${hoge}

$ echo ${hoge["A"]}

$ echo ${hoge["B"]}

zshの場合

% declare -A hoge
% hoge["A"]="a"
% hoge["B"]="b"
% echo ${hoge}
b a
% echo ${hoge["A"]}
a
% echo ${hoge["B"]}
b
% unset hoge
% echo ${hoge}

% echo ${hoge["A"]}
zsh: bad math expression: operand expected at `"A"'
% echo ${hoge["B"]}
zsh: bad math expression: operand expected at `"B"'

変数自体を参照した場合とunsetした後に参照した場合で、bashzshで表示結果が変わっていた。