bash - bash 中的嵌套字典
问题描述
我看到可以使用 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
变量。
谢谢
解决方案
尽管 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
选项不是一个很好用的功能,并且有一些限制。
推荐阅读
- wordpress - 带有 select2 和 Toastr 的 WordPress 获取先前选择的值会破坏 select2 行为
- excel - 从 Excel 运行 Visio 宏并传递参数
- jquery - 如何使用角度获取列数据作为工具提示
- swift - 在Swift 4中的每个字符串字符中添加#字符
- flutter - 如何在 Flutter 中更改位置和大小小部件(如 Youtube 视频)?
- machine-learning - 如何将所有信息从 3d numpy 数组导出到 csv 文件
- java - 如何在 Android Studio 中使用 retofit 检索数据
- getstream-io - GetStream 每个用户同一组的多个提要实例?
- go - 为什么我们需要在 Go 中的 Diffie Hellman 密钥交换算法中恢复公钥
- c# - 异步搜索请求