任何人都可以解释为什么输出不同吗?

问题描述

根据以下输出,看起来只有ZOnes1是数组,其他两个是字符串,为什么?

$ ZOnes0=$(aws ec2 describe-availability-zones --region ap-southeast-2  --query AvailabilityZones[*].ZoneId[] --output text)

echo ${ZOnes0[0]}
apse2-az3 apse2-az1 apse2-az2


$ ZOnes1=(`aws ec2 describe-availability-zones --region ap-southeast-2    --query AvailabilityZones[*].ZoneId[] --output text`)

$echo ${ZOnes1[0]}
$ apse2-az3

$ ZOnes2=$(aws ec2 describe-availability-zones --region ap-south-1 | jq -r '.AvailabilityZones[].ZoneId')

$echo ${ZOnes2[0]}
 aps1-az1 aps1-az3 aps1-az2

screenshot of the codes

如果我跑步

ZOnes0=( $(aws ec2 describe-availability-zones --region ap-southeast-2  --query AvailabilityZones[*].ZoneId[] --output text) ). 

输出如下

$ echo $ZOnes0
apse2-az3
$ echo $ZOnes0[0]
apse2-az3[0]

enter image description here

解决方法

ZONES1是数组,因为在bash中可以使用以下形式的compound assignments来定义数组:

name=(value1 value2 … )

因此您的表达式返回apse2-az3 apse2-az1 apse2-az2,该(...)放在ZONES0中以声明数组。

如果您想对ZONES0=( $(aws ec2 describe-availability-zones --region ap-southeast-2 --query AvailabilityZones[*].ZoneId[] --output text) ) 做同样的事情,只需将其放在复合作业中即可:

char number[32];
sprintf(number,"%d",NUMBER_APPLES)