向现有数组中添加元素 Bash

13
我需要按照几个步骤处理一些数据。 首先,我会在AWS中创建一个托管策略列表,并将其放入一个数组中。
readarray -t managed_policies < <(aws iam list-attached-user-policies --user-name tdunphy  --output json --profile=company-nonprod | jq -r '.AttachedPolicies[].PolicyArn')

但是我随后需要向该数组添加更多信息。我的问题是,我可以使用 readarray 来实现吗?还是我只需要使用命令修改列表中的数据,比如:

managed_policies+=($(aws iam list-attached-group-policies --group-name grp-cloudops --profile=compnay-nonprod | jq -r '.AttachedPolicies[].PolicyArn'))

readarray 是 mapfile 的同义词。请查看 help mapfile 和选项 -O - Cyrus
3个回答

28

我建议使用选项-O来追加到你的数组中:

mapfile -t -O "${#managed_policies[@]}" managed_policies < <(aws ...)

3

您还可以这样做:

readarray -t managed_policies < <(aws ...)
readarray -t tmp < <(aws ...)
managed_policies+=("${tmp[@]}")

OP:但是在我的脚本中稍后需要向该数组添加更多信息。 <-- 上面的代码覆盖了数组的新值。它不会附加到现有的值上。 - tftd

1
假设您可以立即调用 aws(并且您给出的示例表明您可以这样做,因为两组参数都是硬编码的),则只需要一次调用 readarray。 (该函数只是一些不必要的重构。)
get_policies () {
  aws iam list-attached-user-policies --output json --profile company-nonprod "$@"
}

readarray -t managed_policies < <(
 { get_policies --user-name tdunphy
   get_policies --group-name grp-cloudops
 } | jq -r '.AttachedPolicies[].PolicyArn')

(离题了,但是你也可以通过使用适当的参数来调整输出,而省略对jq的调用。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接