【发布时间】:2016-07-26 22:33:58
【问题描述】:
我正在获取 EC2 实例的列表,然后尝试遍历它们,但由于某种原因,我无法使循环正常工作。
output="$(aws ec2 describe-instances --filters 'Name=tag:Environment,Values=development' --query '[Reservations[*].Instances[*].PublicDnsName]' --output text)"
echo $output 显示如下内容:
ec2-55-55-555-555.eu-west-1.compute.amazonaws.com
ec2-66-66-666-666.eu-west-1.compute.amazonaws.com
然后我创建一个这样的数组:
instances=(${output//'\n'/ })
echo ${instances[0]} 和 echo ${instances[1]} 给出正确的输出。
然后尝试遍历数组:
for i in $instances; do echo instance: "$i"; done
但我明白了:
实例:ec2-55-55-555-555.eu-west-1.compute.amazonaws.com ec2-66-66-666-666.eu-west-1.compute.amazonaws.com
代替:
instance: ec2-55-55-555-555.eu-west-1.compute.amazonaws.com
instance: ec2-66-66-666-666.eu-west-1.compute.amazonaws.com
我做错了什么?有没有更好的方法来循环遍历结果,也许是使用 json 输出格式?
【问题讨论】:
-
尝试运行
for i in $output; do echo $i; done -
我试过了,它回显了整个变量。不拆分行。
-
怎么样:
for i in "${instances[@]}"; do ...? -
只需添加一个行分隔符:
for i in $instances; do echo instance: "$i"$'\n'; done -
另请参阅Bash FAQ 001,了解如何正确地从流中逐行读取。
标签: bash loops aws-cli aws-ec2