bash - 如何遍历 bash 中的字典列表

标签 bash list shell dictionary

我目前正在学习 shell 脚本,需要您的帮助!

> array = [{u'name': u'androidTest', u'arn': u'arn:XXX', u'created':
1459270137.749}, {u'name': u'android-provider2016-03-3015:23:30', u'arn':XXXXX', u'created': 1459365812.466}]

我有一个字典列表,想从字典中提取 arn 值。在 python 中它非常简单,例如:

for project in array:
   print project['arn']

我将如何在 bash 中编写等效循环?如果我尝试这样的事情,它是行不通的:

for i in "$array"
do
  echo $i['arn']
done

建议的副本用于关联数组,而不是关联数组列表。

最佳答案

Bash 不能嵌套数据结构,因此与字典列表相对应的东西本身并不存在。使用相对较新的 Bash(4.3 或更新版本),我们可以通过 namerefs 实现类似的效果:

# Declare two associative arrays
declare -A arr1=(
    [name]='androidTest'
    [arn]='arn:XXX'
    [created]='1459270137.749'
)

declare -A arr2=(
    [name]='android-provider2016-03-3015:23:30'
    [arn]='XXXXX'
    [created]='1459365812.466'
)

# Declare array of names of associative arrays
names=("${!arr@}")

# Declare loop variable as nameref
declare -n arr_ref

# Loop over names
for arr_ref in "${names[@]}"; do
    # Print value of key 'arn'
    printf "%s\n" "${arr_ref[arn]}"
done

返回

arn:XXX
XXXXX

关于bash - 如何遍历 bash 中的字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36321461/

相关文章:

visual-studio-2010 - 如何在测试 WCF 服务时将值传递给 List<string> 属性?

bash - 为什么 shell 脚本在其他地方运行相同的代码时会出现语法错误?

linux - Bash 确定最高变量和最低变量之间的差异

python - 选择最大值时从列表中返回随机值并且具有 2 个相同的最大值

regex - 如何使用 sed 命令删除一行中除前三个字符以外的所有字符?

linux - 如何在 Linux 中启动停止的进程

python - 如何在 python 中将命令的输出通过管道传输到 `/dev/null`

c - 带链表的稀疏矩阵

linux - 使用 AWK 将 float 转换为用户定义的输出

linux - rsync 不同步文件名中的大写/小写。我怎样才能让它同步上限?