Вот один из способов сделать то, что вы хотите.
Чтобы извлечь только тот шаблон, который вам нужен.
echo "['us-east-1', 'us-west-1', 'us-south-1']" | grep -Eo '[[:alnum:]-]+'
Вывод
us-east-1
us-west-1
us-south-1
Если входные данные поступают из файла .yml
mapfile -t array < <(grep -Eo '[[:alnum:]-]+' policy.yml)
Чтобы сохранить это в массив, используя mapfile
mapfile -t array < <(echo "['us-east-1', 'us-west-1', 'us-south-1']" | grep -Eo "[[:alnum:]-]+")
Чтобы добавить --region
перед каждым элемент в массиве.
"${array[@]/#/--region }"
echo "${array[@]/#/--region }"
output
-region us-east-1 --region us-west-1 --region us-south-1
Для добавления всех команд
echo custodian run -s out "${array[@]/#/--region }" policy.yml
Output
custodian run -s out --region us-east-1 --region us-west-1 --region us-south-1 policy.yml
Проблема с этим подходом состоит в том, что оба --region us-west
являются одним аргументом.
Если это не сработает, вам потребуется l oop через массив и добавить --region
для каждого элемента.
Что-то вроде.
for i in "${array[@]}"; do
options+=(--region "$i")
done
А потом все команды запускать.
echo custodian run -s out "${options[@]}" policy.yml
Вывод
custodian run -s out --region us-east-1 --region us-west-1 --region us-south-1 policy.yml
- Удалить
echo
выполнять команды, а не просто выводить на stdout