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.读取数组

  • 获取数组某个元素的值({数组名[下标]} 如){arrayName[0]}
  • 使用@可以获取数组中的所有元素({数组名[@]},如){arrayName[@]}
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
原文地址:https://www.cnblogs.com/csj2018/p/9541595.html