Вопрос или проблема
ПЕРЕД ЗАКРЫТИЕМ ЭТОГО ВОПРОСА – ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ ЕГО!
Эти решения не являются ответами на этот вопрос.
- Парсинг JSON в массив в shell-скрипте
- Итерация по JSON массиву в shell-скрипте
- Парсинг JSON в массив в shell-скрипте
Это пример скрипта AWS CLI:
taskDefs=$(aws ecs list-task-definitions --status="INACTIVE" --query="taskDefinitionArns")
echo $taskDefs
# вывод: ["arn:1", "arn:2", "arn:3"]
Это выдает точно то же самое:
echo $taskDefs[0]
# вывод: ["arn:1", "arn:2", "arn:3"]
Я хочу пройти по результатам, но, похоже, он просто выводит весь массив.
for value in "${taskDefs[@]}"
do
echo "value=$value"
done
# вывод: value=["arn:1", "arn:2", "arn:3"]
Я хочу, чтобы выводилось:
value="arn:1"
Ответ или решение
Чтобы корректно преобразовать вывод AWS CLI в массив Bash, мы можем воспользоваться утилитой jq
, которая служит для обработки JSON. Ниже приведены шаги и пример, как это сделать.
-
Установите
jq
, если у вас его ещё нет. Вы можете сделать это, используя пакетный менеджер вашей системы. Например, для Ubuntu используйте команду:sudo apt-get install jq
-
Используйте AWS CLI для получения списка ваших задач, а затем передайте этот вывод через
jq
, чтобы преобразовать его в массив.
Вот пример, как можно реализовать это в скрипте Bash:
# Получаем список определений задач и преобразуем его в массив
taskDefs=$(aws ecs list-task-definitions --status="INACTIVE" --query="taskDefinitionArns" --output json)
# Преобразуем JSON-массив в Bash-массив с помощью jq
taskDefsArray=($(echo "$taskDefs" | jq -r '.[]'))
# Итерация по элементам массива
for value in "${taskDefsArray[@]}"; do
echo "value=$value"
done
Объяснение кода:
-
aws ecs list-task-definitions --status="INACTIVE" --query="taskDefinitionArns" --output json
получает список неактивных определений задач и выводит его в формате JSON. -
jq -r '.[]'
разбирает JSON и извлекает элементы массива, выводя их в обычном текстовом формате. Флаг-r
используется для удаления кавычек, чтобы элементы могли быть правильно помещены в массив Bash. -
taskDefsArray=($(...))
— это синтаксис для инициализации массива в Bash. Вывод, который приходит отjq
, будет разбиваться на отдельные элементы. -
В цикл
for
мы проходимся по каждому элементу массива и выводим его значение.
Теперь с помощью этого скрипта вы сможете корректно получить отдельные значения из вывода AWS CLI и использовать их в вашем Bash-скрипте.