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毎回プロセスを fork することを避けることができます。

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 に答える