shell数组
shell支持一维数组(不支持多维数组),并且没有限定数组的大小。
定义数组
shell中,用括号来表示数组,数组元素用空格分隔,下标从0开始,元素的类型
方式1
数组名=(值1 值2...值n),如array_name=(value0 value1 value2)
方式2
array_name=(value0 value1 value2 )
方式3 单独定义数组的值
array_name[0]=value0array_name[1]=value1array_name[2]=value2
读取数组
获取数组某个元素的值${数组名[下标]} 使用@可以获取数组中的所有元素${数组名[@]}
获取数组的长度
获取数组长度的方法和获取字符串长度的方法相同。length=${#数组名[@]}length=${#数组名[*]}获取数组某元素的长度length=${#数组名[下标]}
#shell#!/bin/shlist1=("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 4list3: 陆风 江铃 长安 3list3[0]: 陆风 2list3[2]: 0shell数组中和@的区别加上双引号,会被当成一串字符串处理
@加上双引号,依然被当作数组处理
#shell#!/bin/shlist_a=(1 2 'a' b)echo "--{array[@]}--"for i in ${list_a[@]};do echo $idoneecho "--{array[*]}--"for i in ${list_a[*]};do echo $idoneecho "--\"{array[@]}\"--"for i in "${list_a[@]}";do echo $idoneecho "--\"{array[*]}\"--"for i in "${list_a[*]}";do echo $idone
--{array[@]}-- 1 2 a b --{array[*]}-- 1 2 a b --"{array[@]}"-- 1 2 a b --"{array[*]}"-- 1 2 a b
变量在数组中的使用
数组里添加变量,必须要加$,否则添加的是一个字符串使用变量作为下标去获取value,变量加不加$都可以
#shell#!/bin/shstrA="Tom Cat"StrB="Black"a=3list_a=(1 2 'a' b $strName StrDarle)echo ${list_a[@]}echo ${list_a[$a]} ${list_a[a]}
1 2 a b StrDarle b b