shell数组
shell支持一维数组(不支持多维数组),并且没有限定数组的大小。
定义数组
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
读取数组
获取数组某个元素的值${数组名[下标]}
使用@可以获取数组中的所有元素${数组名[@]}
获取数组的长度
获取数组长度的方法和获取字符串长度的方法相同。
length=${#数组名[@]}
length=${#数组名[*]}
获取数组某元素的长度
length=${#数组名[下标]}
#shell
#!/bin/sh
list1=("east" "west" "north" "south")
list2=('one'
'two'
'three'
'four'
)
list3[0]="陆风"
list3[1]="江铃"
list3[3]="长安"
echo "list1: "${list1[@]} ${#list1[@]}
echo "list2: "${list2[@]} ${#list2[@]}
echo "list3: "${list3[@]} ${#list3[@]}
echo "list3[0]: "${list3[0]} ${#list3[0]}
echo "list3[2]: "${list3[2]} ${#list3[2]}
list1: east west north south 4
list2: one two three four 4
list3: 陆风 江铃 长安 3
list3[0]: 陆风 2
list3[2]: 0
shell数组中和@的区别
加上双引号,会被当成一串字符串处理
@加上双引号,依然被当作数组处理
#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
变量在数组中的使用
数组里添加变量,必须要加$,否则添加的是一个字符串
使用变量作为下标去获取value,变量加不加$都可以
#shell
#!/bin/sh
strA="Tom Cat"
StrB="Black"
a=3
list_a=(1 2 'a' b $strName StrDarle)
echo ${list_a[@]}
echo ${list_a[$a]} ${list_a[a]}
1 2 a b StrDarle
b b