5

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" )'),最好不诉诸字符串操作?

4

2 回答 2

2

除了字符串操作之外,似乎没有其他方法可以做到这一点。但至少我们可以避免sed每次都分叉一个进程,例如:

dump_assoc_arrays () {
    for var in "$@"; do
        read debug < <(declare -p $var)
        echo "${debug#declare -A }"
    done
}
于 2013-03-03T15:39:24.530 回答
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
于 2013-03-01T18:33:48.780 回答