在bash中干净地转储关联数组内容的简单方法?

时间:2013-03-01 14:33:30

标签: bash associative-array zsh

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" )')的内容,最好不要求助于字符串操作?

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