在zsh中,我可以使用单个命令轻松转储关联数组的内容:
zsh% typeset -A foo
zsh% foo=(a 1 b 2)
zsh% typeset foo
foo=(a 1 b 2 )
然而,尽管搜索高低,我能找到的最好的是declare -p,其输出包含声明-A:
bash$typeset -A foo
bash$foo=([a]=1 [b]=2)
bash$declare -p foo
declare -A foo='([a]="1" [b]="2" )'
有没有一种干净的方法来获得像zsh输出(理想情况下foo =(a 1 b 2)或foo ='([a] =“1”[b] =“2”)’),最好不要求助于字符串操作?
最佳答案 似乎除了字符串操作之外没有办法做到这一点.但至少我们每次都可以避免使用sed进程,例如:
dump_assoc_arrays () {
for var in "$@"; do
read debug < <(declare -p $var)
echo "${debug#declare -A }"
done
}