我有一个如下的yaml数组,
identitymappings:
- arn: "arn:aws:iam::12345567:role/AdmRole"
group: "system:masters"
user: "user1"
- arn: "arn:aws:iam::12345567:role/TestRole"
group: "system:masters"
user: "user2"
我正在尝试使用for循环和yq在bash脚本中解析此Yaml。
for identityMapping in $(yq read test.yaml "identitymappings[*]"); do
roleArn=$identityMapping["arn"]
group=$identityMapping.group
user=$identityMapping.user
done
但是我无法获得预期的结果,例如无法获取roleArn,group,user的值。 请让我知道如何解决此问题。
答案 0 :(得分:1)
从jq或yq读入bash的最简单方法是使用BashFAQ #1 while read
循环来处理面向行的数据。在下面,我们使用@tsv
生成面向行的输出:
while IFS=$'\t' read -r roleArn group user _; do
echo "Role: $roleArn"
echo "Group: $group"
echo "User: $user"
done < <(yq -j read test.yaml \
| jq -r '.identitymappings[] | [.arn, .group, .user] | @tsv')
请注意,如果您使用的是the Python yq
而不是the Go one,则可以删除yq -j read
,而只需使用yq -r '...'
代替jq -r '...'
。
答案 1 :(得分:-1)
我想通了..
16.300000000000000710542735760100185871124267578125