我正在做一些清单工作,我试图将所有的AWS区域保存在一个数组上,然后将元素一个接一个地显示出来,作为输入菜单。
下面的命令给出了正确的输出,但是当我使用FOR进入数组时,数组长度只有1,因为结果是:
aws ec2 describe-regions --output text|awk -F\t '{print $3}'| sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g'
eu-north-1 ap-south-1 eu-west-3 eu-west-2 eu-west-1 ap-东北-2 ap-东北-1 sa-东-1 ca-central 1 ap-东南-1 ap-东南-2 eu-central 1 us-东-1 us-东-2 us-west-1 us-west-2
下面是我对数组进行归档的方式:
# Get regions
declare -a regions=$(aws ec2 describe-regions --output text | awk -F\t '{print $3}' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /')
echo -e "\nPlease, select the region you would like to query: "
# Print Regions
len=${#regions[@]}
last=$((len+1))
for (( i=0; i<$len; i++ )); do
echo -e "$i.${regions[$i]}\n" ;
done
echo -e "$last All of them (this could take a while...O_o)\n"
read region_opt
if [${region_opt}!=${last}] then
region=(${regions[$region_opt]})
我希望输出中包含的内容如下所示
发布于 2019-04-15 04:17:38
数组值前后缺少圆括号,例如,
declare -a ARRAY=(value1 value2 ... valueN)
(参考:https://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_02.html,https://www.gnu.org/software/bash/manual/bash.html)
以下形式也适用,第一种形式(不带declare -a
)在GNU's Bash reference manual、Bash guide for beginners和Advanced bash-scripting guide中作为示例给出
ARRAY=(value1 value2 ... valueN)
declare ARRAY=(value1 value2 ... valueN)
发布于 2019-04-15 09:53:23
$()
是命令替换,只是将任何标准输出转换为字符串并将其分配给变量
如果你说真,那么结果是;
然后让eu-north-1 ap-south-1 eu-west-3...
从数组中取出数组,使它在语法上看起来是这样的,然后告诉Bash值就是这样,
regions=($regions)
扩展后,它将是有效的数组语法
regions=(eu-north-1 ap-south-1 eu-west-3)
则在被""
包围并作为Bash eval
参数后,将被计算为有效数组
$ eval "regions=($regions)"
$ echo ${regions[0]}
eu-north-1
所以我相信你能自己完成并解决它……
https://stackoverflow.com/questions/55679025
复制相似问题