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

时间:2020-09-03 00:00:43

标签: amazon-web-services command-line-interface

根据以下输出,看起来只有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

1 个答案:

答案 0 :(得分:0)

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)