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[@]}
|