Linux shell之数组的基本用法

bash shell 只支持一维数组,数组从0开始标号,以array[x]表示数组元素,
bash shell 所支持的最大的数组标号是599147937791
bash shell 取得数组值的命令格式如下:

${array[x]}

vi array_evall.sh
#!/bin/bash

#下面对city数组的赋值
city[0]=Nanjing
city[1]=Beijing #以上对第1个和第2个数组元素赋值
city[9]=Melbourne #对第10个数组元素赋值,Shell允许数组空缺元素
city[15]=NewYork #对第16个数组元素赋值

#以下输出city数组的值

echo "city[0]=${city[0]}"
echo "city[1]=${city[1]}"
echo "city[9]=${city[9]}"
echo "city[15]=${city[15]}"
echo "city[2]=${city[2]}" #打印未初始化数组的值
echo "city[10]=${city[10]}"

./array_evall.sh
city[0]=Nanjing
city[1]=Beijing
city[9]=Melbourne
city[15]=NewYork
city[2]=
city[10]=

下面的方法是用圆括号给数组赋值

vi array_evall2.sh
#!/bin/bash

#用圆括号将一组值赋给city
city=(Nanjing Beijing Melbourne NewYork)

#输出标号从0到5的city的数组值

echo "city[0]=${city[0]}"
echo "city[1]=${city[1]}"
echo "city[2]=${city[2]}"
echo "city[3]=${city[3]}"
echo "city[4]=${city[4]}"
echo "city[5]=${city[5]}"

./array_evall2.sh
city[0]=Nanjing
city[1]=Beijing
city[2]=Melbourne
city[3]=NewYork
city[4]=
city[5]=

vi array_evall3.sh
#!/bin/bash

#[10]指定city数组标号为10的元素的值

city=(nanjing [10]=Atlanta Massachusetts Marseilles)
echo "city[0]=${city[0]}"
echo "city[1]=${city[1]}"
echo "city[10]=${city[10]}"
echo "city[11]=${city[11]}"
echo "city[12]=${city[12]}"
echo "city[13]=${city[13]}"

./array_evall3.sh
city[0]=nanjing
city[1]=
city[10]=Atlanta
city[11]=Massachusetts
city[12]=Marseilles
city[13]=

vi array_evall4.sh
#!/bin/bash

#以任意顺序指定位置为数组赋值
city=([2]=Nanjing [10]=Atlanta [1]=Massachusetts [5]=Marseilles)

echo "city[1]=${city[1]}"
echo "city[2]=${city[2]}"
echo "city[5]=${city[5]}"
echo "city[10]=${city[10]}"
./array_evall4.sh
city[1]=Massachusetts
city[2]=Nanjing
city[5]=Marseilles
city[10]=Atlanta

bash shell默认将变量看作是只有一个元素的数组,而且@和符号*都可以用来表示数组的元素
onearray=WebAPIs
echo ${onearray[@]}
WebAPIs
echo ${onearray[*]}
WebAPIs
echo ${onearray[0]}
WebAPIs
echo ${#onearray[1]}
0
echo ${#onearray[*]}
1

在参数传递时,$@和$*表示传递到脚本的所有参数,在数组中,@与*符号与位置参数类似,
表示全部,即array[@]和array[*]都表示所有元素
vi array_print1.sh
#!/bin/bash

city=(Nanjing Beijing Melbourne NewYork) #数组赋值

for i in ${city[@]} #也可以将@替换为*
do
echo $i
done
./array_print1.sh
Nanjing
Beijing
Melbourne
NewYork

vi array_print2.sh
#!/bin/bash

city[1]="Hong kong"
city[100]=Massachusetts
city[101]="New York"
city[10000]=Atlanta

for i in "${city[@]}" #需要用引号将{city[@]}引起, 此时"${city[@]}"与"${city[*]}"有差异
do
echo $i
done
./array_print2.sh
Hong kong
Massachusetts
New York
Atlanta

${city[*]}将所有的元素打印在一行内,中间以IFS分隔
${city[@]},将数组所有的元素分行打印

posted @ 2021-04-12 13:56  zhudaheng123  阅读(433)  评论(0)    收藏  举报