从命令的输出中创建逗号分隔的列表

时间:2017-05-18 23:56:37

标签: shell amazon-web-services amazon-ec2 sh aws-cli

AUTOSCALING_NODES=$(aws elb describe-load-balancers --load-balancer-names $ELB_NAME --query LoadBalancerDescriptions[0].Instances --output text)
declare -a IP_ARRAY=($AUTOSCALING_NODES)
for i in ${IP_ARRAY[*]}; do ipaddress=$(aws ec2 describe-instances --instance-id $i --query Reservations[].Instances[].NetworkInterfaces[].PrivateIpAddresses[].PrivateIpAddress --output text); 
echo $ipaddress

这些ips是上面awscli的输出。这些应放在一个变量中,逗号分隔为string.10.0.0.0 10.0.0.000

1 个答案:

答案 0 :(得分:0)

您正在覆盖循环中的ipaddress变量。相反,将它附加到数组,然后在循环之后格式化它:

declare -a ipaddress
for i in "${IP_ARRAY[@]}"; do
  ipaddress+=($(aws ec2 describe-instances --instance-id $i --query \
              Reservations[].Instances[].NetworkInterfaces[].PrivateIpAddresses[].PrivateIpAddress \
              --output text));
done

ipaddresses=$(printf '%s\n' "${ipaddresses[@]}" | sort -u | paste -sd, - | sed 's/,$//')
    内部循环中的
  • +=将结果作为新元素
  • 附加到数组中
  • printf ... | sort -u | paste ...将重复数据删除的数组转换为逗号分隔列表