Shell 数组 参考: Shell中的数组及其相关操作_杰瑞的专栏-CSDN博客
应用场景:
求数组的长度
元素长度
遍历数组
元素切片
替换
删除
备注:
Shell中的数组不像JAVA/C,只能是一维数组, 没有二维数组
数组元素大小无约束,也无需先定义数组的元素个数
索引从0开始
不像JAVA/C等强编程语言,在赋值前必须声明;SHELL只是弱编程语言,可事先声明也可不声明;
用unset来撤销数组,可用unset array_name[i]来删除里面的元素
声明 1 2 3 4 declare -a array_name # 声明数组,也可不声明 declare -a nums=(1 2 3 4) # 声明数组, 同时赋值 unset array_name # 删除数组,撤销数组 unset nums[0] # 删除数组中某个元素
定义 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 方式一: array_names=( value0 valuel value2 value3 ) # 方式二: names=(Jerry Alice David wendy) # 方式三: names[0]=Jerry names[1]=Alice names[2]=David names[3]=Wendy # 方式四: names=([0]=Jerry [1]=Alice [2]=David [3]=Wendy) # 方式五: str="Jerry Alice David Wendy" names=($str)
备注:
数组中的元素,必须用”空格”来隔开
定义数组索引,可以不按顺序来,例如,names=([0]=Jerry [1]=Alice [2]=David [8]=Wendy)
字符串是SHELL中最重要的数据类型,其也可通过($str)来转成数组,操作起来非常方便
数组长度 1 2 3 4 5 6 7 8 nums=(Jerry Alice David Wendy) # 方式1 ${#数组名[@]} ~ echo ${#nums[@]} 4 # 方式2 ${#数组名[*]} ~ echo ${#nums[*]} 4
备注:
使用${array_name[@]} 或者 ${array_name[*]} 都可以全部显示数组中的元素
同样道理${#array_name[@]} 或者 ${#array_name[*]}都可以用来求数组的长度
求数组中元素的长度方法有很多,相当于求字符串的长度
数组遍历 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 names=(Jerry Alice David Wendy) # 方式一: 按索引来遍历 for((i=0;i<${#names[@]};i++)) do echo ${names[$i]} done # 方式二: 不按索引来遍历 index=0 for name in ${names[@]} do echo "第${index}个元素的值为:==> ${name}" let index++ done
数组赋值 1 2 3 nums=(1 2 3 4) # 定义数组 nums[3]=44 # 第三个元素重新赋值 echo ${nums[@]} # 结果变成了 1 2 3 44
备注:
第一种是给已经存在的元素项重新赋值
当然也可以给不存在的索引添加赋值,可以看下面的示例
1 2 3 4 5 6 7 8 9 10 11 12 13 # # 方式-: 给不存在的索引赋值 nums=(1 2 3 4) # 定义数组 nums[4]=5 # 给第四个新元素赋值 echo ${nums[@]} # 结果变成了 1 2 3 4 5 nums[8]=8 # 给第8个元素赋值 echo ${nums[@]} # 结果变成了 1 2 3 4 5 8 # 方式二: 直接使用 新数组=(旧数组 新元素) 的方法添加元素 old=(1 2 3 4) new=(${old[*]} 5) echo ${new[@]}