shell 3数组
shell支持一维数组(不支持多维数组),并且没有限定数组的大小。
1. 定义数组
shell中,用括号来表示数组,数组元素用空格分隔,下标从0开始
方式1:
数组名=(值1 值2...值n),如array_name=(value0 value1 value2)
方式2:array_name=(value0 value1 value2 )
方式3 :单独定义数组的值array_name[0]=value0 array_name[1]=value1 array_name[2]=value2
2.读取数组
- 获取数组某个元素的值\({数组名[下标]} 如\)
- 使用@可以获取数组中的所有元素\({数组名[@]},如\)
array=(1 3 4 6)
#打印第一个元素
echo ${array[0]} #1
#打印全部元素
echo ${array[@]} #1 3 4 6
echo ${array[*]} #1 3 4 6
3. 获取数组的长度
- 获取数组长度的方法和获取字符串长度的方法相同:
length=${#数组名[@]}或length=${#数组名[*]}
- 获取数组某元素的长度:length=$
#!/bin/sh
list1=("east" "west" "north" "south")
list2=('one'
'two'
'three'
'four'
)
list3[0]="陆风"
list3[1]="江铃"
list3[3]="长安"
#打印list1的所有元素
echo "list1元素: "${list1[@]} #list1元素: east west north south
#打印list2的长度
echo "list2长度:"${#list1[@]} #list2长度:4
#打印list3的第一个元素及其长度
echo "list3第1个元素: "${list3[0]} ${#list3[0]} #list3第1个元素: 陆风 2
#打印数组不存在的元素
echo "list3第3个元素: "${list3[2]} ${#list3[2]} #list3第3个元素: 0
4. shell数组中*和@的区别
\*加上双引号,会被当成一串字符串处理
@加上双引号,依然被当作数组处理
#!/bin/sh
list_a=(1 2 'a' b)
echo "--{array[@]}--"
for i in ${list_a[@]};do
echo $i
done
echo "--{array[*]}--"
for i in ${list_a[*]};do
echo $i
done
echo "--\"{array[@]}\"--"
for i in "${list_a[@]}";do
echo $i
done
echo "--\"{array[*]}\"--"
for i in "${list_a[*]}";do
echo $i
done
结果:
--{array[@]}--
1
2
a
b
--{array[*]}--
1
2
a
b
--"{array[@]}"--
1
2
a
b
--"{array[*]}"--
1 2 a b
5.变量在数组中的使用
数组里添加变量,必须要加$,否则添加的是一个字符串
使用变量作为下标去获取value,变量加不加$都可以
#!/bin/sh
strA="Tom Cat"
a=5
#传入不存在的变量,数组不会增加
#传入带空格的变量,会将变量按空格分拆添加到数组中
list_a=(1 2 'a' b $c $strA StrDarle)
echo ${#list_a[@]}
#获取第6个和第7个元素
echo "第6个元素:"${list_a[$a]} "第7个元素" ${list_a[a+1]}
for i in `seq 1 ${#list_a[@]}`;do
echo "第${i}个元素:"${list_a[i-1]}
done
结果
7
第6个元素:Cat 第7个元素 StrDarle
第1个元素:1
第2个元素:2
第3个元素:a
第4个元素:b
第5个元素:Tom
第6个元素:Cat
第7个元素:StrDarle