Shell 数组

Shell 数组

参考: Shell中的数组及其相关操作_杰瑞的专栏-CSDN博客

应用场景:

  1. 求数组的长度

  2. 元素长度

  3. 遍历数组

  4. 元素切片

  5. 替换

  6. 删除

备注:

  1. Shell中的数组不像JAVA/C,只能是一维数组, 没有二维数组

  2. 数组元素大小无约束,也无需先定义数组的元素个数

  3. 索引从0开始

  4. 不像JAVA/C等强编程语言,在赋值前必须声明;SHELL只是弱编程语言,可事先声明也可不声明;

  5. 用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)

备注:

  1. 数组中的元素,必须用”空格”来隔开

  2. 定义数组索引,可以不按顺序来,例如,names=([0]=Jerry [1]=Alice [2]=David [8]=Wendy)

  3. 字符串是SHELL中最重要的数据类型,其也可通过($str)来转成数组,操作起来非常方便

数组长度

1
2
3
4
5
6
7
8
nums=(Jerry Alice David Wendy)

#方式1 ${#数组名[@]}
~ echo ${#nums[@]}
4
#方式2 ${#数组名[*]}
~ echo ${#nums[*]}
4

备注:

  1. 使用${array_name[@]} 或者 ${array_name[*]} 都可以全部显示数组中的元素

  2. 同样道理${#array_name[@]} 或者 ${#array_name[*]}都可以用来求数组的长度

  3. 求数组中元素的长度方法有很多,相当于求字符串的长度

数组遍历

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. 当然也可以给不存在的索引添加赋值,可以看下面的示例

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

Shell 数组
https://yxibng.github.io/2022/02/25/Shell/2022-02-25-Shell 数组/
作者
yxibng
发布于
2022年2月25日
许可协议