在zsh
中,我可以使用单个命令轻松转储关联数组的内容:
zsh% typeset -A foo
zsh% foo=(a 1 b 2)
zsh% typeset foo
foo=(a 1 b 2 )
然而,尽管搜索高低,我能找到的最好的是declare -p
,其输出包含declare -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" )'
)的内容,最好不要求助于字符串操作?
答案 0 :(得分:2)
似乎除了字符串操作之外没有办法做到这一点。但至少我们每次都可以避免分支sed
进程,例如:
dump_assoc_arrays () {
for var in "$@"; do
read debug < <(declare -p $var)
echo "${debug#declare -A }"
done
}
答案 1 :(得分:0)
declare -A
是多余的
好先生,declare -A
不是多余的。
$ foo=([a]="1" [b]="2")
$ echo ${foo[a]}
2
$ declare -A bar=([a]="1" [b]="2")
$ echo ${bar[a]}
1