我目前正在学习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
建议的副本用于关联数组,而不是关联数组列表。
答案 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