bash中的嵌套词典

时间:2018-12-13 13:59:00

标签: bash dictionary

我看到可以使用bash 4生成字典:

declare -A dict=( ["John"]="23" ["Jackie"]="21" )

我的问题是,我们可以将其他词典分配为值吗?

例如具有如下结构:

declare -A dict=( ["John"]=["age"="23" "weight"="150"] ["Jackie"]=["age"="21" "weight"="140"] )

哪个表示的结构如下:

John:
    age: 23
    weight: 150


Jackie:
    age: 21
    weight: 140

我想使用2个字典,但是我不知道这是否是在bash中实现嵌套字典的最佳方法:

declare -A John=( ["age"]="23" ["weight"]="150" )
declare -A dict=( ["John"]=${John} )

在这种情况下,我无法访问ageweight变量。

谢谢

1 个答案:

答案 0 :(得分:2)

尽管其他人评论道,bash不支持嵌套数组, 如果您的bash版本为4.3或更高版本,则declare有一个-n选项 定义对变量名称的引用,其作用类似于 C指针。
然后您可以说:

declare -A John=( ["age"]="23" ["weight"]="150" )
declare -A Jackie=( ["age"]="21" ["weight"]="140" )
declare -a dict=("John" "Jackie")

for member in "${dict[@]}"; do
    echo "$member :"
    declare -n p="$member"  # now p is a reference to a variable "$member"
    for attr in "${!p[@]}"; do
        echo "    $attr : ${p[$attr]}"
    done
done

输出:

John :
    weight : 150
    age : 23
Jackie :
    weight : 140
    age : 21

请注意,-n选项不是一个很好用的函数,并且有一些限制。