如何在bash中迭代字典列表

时间:2016-03-30 23:20:46

标签: 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

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

2 个答案:

答案 0 :(得分:4)

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
arr_of_arrs=(arr1 arr2)

# Loop over names
for arr_name in "${arr_of_arrs[@]}"; do

    # Assign name to nameref
    declare -n arr_ref="$arr_name"

    # Print value of key 'arn'
    printf "%s\n" "${arr_ref[arn]}"

done

返回

arn:XXX
XXXXX

答案 1 :(得分:-3)

for project in $array 
do
  echo $project{'arn'}
done

或者在一行中:

for project in $array; do echo $project{'arn'}; done
相关问题