问题描述
根据以下输出,看起来只有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
如果我跑步
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]
解决方法
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)