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

Ada*_*ers 5 bash associative-array zsh

我可以使用zsh单个命令轻松转储关联数组的内容:

zsh% typeset -A foo
zsh% foo=(a 1 b 2)
zsh% typeset foo
foo=(a 1 b 2 )
Run Code Online (Sandbox Code Playgroud)

然而,尽管搜索高低,我能找到的最好的是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" )'
Run Code Online (Sandbox Code Playgroud)

是否有一种干净的方法来获取类似输出zsh(理想情况下foo=(a 1 b 2 )foo='([a]="1" [b]="2" )')之类的内容,最好不诉诸字符串操作?

Ada*_*ers 2

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

dump_assoc_arrays () {
    for var in "$@"; do
        read debug < <(declare -p $var)
        echo "${debug#declare -A }"
    done
}
Run Code Online (Sandbox Code Playgroud)