我看到可以使用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} )
在这种情况下,我无法访问age
或weight
变量。
谢谢
答案 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
选项不是一个很好用的函数,并且有一些限制。