Я пытаюсь запустить приведенную ниже команду, но получаю ошибку неправильной замены.
for i in ${aws eks list-clusters --query 'clusters' --output text | tr '\t' '\n' | grep dev-shark}; do aws eks describe-cluster --name $i | jq '.cluster.tags."Dev-Ver"'; done
см. сообщение об ошибке ниже
bash: ${aws eks list-clusters --query 'clusters' --output text | tr '\t' '\n' | grep dev-shark}: bad substitution
Любые идеи, что может быть причиной этого?
Спасибо.
@GordonDavisson фантастика!!! Это решило проблему! Большое спасибо за Вашу помощь. Я сделаю заметку об этом для будущего использования. Если вы опубликуете это как ответ, я могу принять его :)
Наверное, лучше просто закрыть вопрос как опечатку, так как в принципе все это было.





Последний канал не устанавливает никакого действия «| dev-shark», вы хотите отфильтровать текст «dev-shark», тогда код должен быть
for i in ${aws eks list-clusters --query 'clusters' --output text | tr '\t' '\n' | grep dev-shark}; do aws eks describe-cluster --name $i | jq '.cluster.tags."Dev-Ver"'; done
спасибо, что указали на это. Это был случай, когда вырезание и вставка пошли не так. Я внес поправку в ОП. Проблема была решена в соответствии с приведенным выше предложением GordonDavisson относительно подстановки команды $().
Не используйте for для чтения строк.
Я бы предложил направить вывод конвейера aws|tr|grep в цикл while read: добавление продолжений строк и новых строк для удобочитаемости.
aws eks list-clusters --query 'clusters' --output text \
| tr '\t' '\n' \
| grep dev-shark \
| while IFS= read -r line; do
aws eks describe-cluster --name "$line" \
| jq '.cluster.tags."Dev-Ver"'
done
спасибо за предложение, сработало с первого раза :)
У вас есть фигурные скобки вокруг конвейера —
${aws ... dev-shark}вместо скобок.${ }для подстановки переменных,$( )для подстановки команд.