将元素添加到现有阵列Bash

时间:2018-10-31 20:31:34

标签: arrays bash

我需要分几个步骤处理一些数据。

我首先在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'))

3 个答案:

答案 0 :(得分:2)

我建议使用选项-O附加到您的数组:

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

答案 1 :(得分:1)

您也可以这样做:

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

答案 2 :(得分:0)

假设您可以立即调用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的适当参数来适当调整输出,从而省略对aws的调用。)