Bash脚本数组定义声明及引用
一.概述
- 数据结构,数据序列,保存了连续的多个数据,可以使用索引获取相关元素,相当于多个变量的集合
- Bash支持一维数组(不支持多维数组),并且没有限定数组的大小
- 数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0
二.数组的用法
1.普通数组
数组中的元素要用空格隔开
若用逗号隔开,则会被误认为是一个整体
若不指定打印哪个,则默认打印第一个下标的变量
指定下标时,负数表示从后往前数,如-1表示倒数第一个,-3表示倒数第三个
[root@mail ~]# array_1=(1 2 3 4)
[root@mail ~]# array_2=(1,2,3,4)
[root@mail ~]# echo $array_1
1
[root@mail ~]# echo $array_2
1,2,3,4
[root@mail ~]# echo ${array_1[2]}
3
[root@mail ~]# echo ${array_1[-2]}
3
[root@mail ~]# echo ${array_1[-1]}
4
[root@mail ~]# echo ${array_1[-3]}
2
2.普通数组,自定义索引位置
[root@mail ~]# array_3[0]=1
[root@mail ~]# array_3[1]=2
[root@mail ~]# array_3[2]=3
[root@mail ~]# array_3[3]=4
[root@mail ~]# echo ${array_3[*]} #打印所有的值
1 2 3 4
[root@mail ~]# echo ${array_3[@]} #用 * 和 @ 都可以
1 2 3 4
[root@mail ~]# echo ${!array_3[@]} #打印下标
0 1 2 3
[root@mail ~]# echo ${!array_3[*]}
0 1 2 3
[root@mail ~]# echo ${#array_3[2]} #打印某个变量的长度
1
[root@mail ~]# echo ${#array_3[*]} #打印数组长度
4
[root@mail ~]# echo ${#array_3[@]}
4
3.关联数组
关联数组支持字符串作为数组索引。使用关联数组必须先使用declare -A声明它
关联数组类似于Python的字典
[root@mail ~]# declare -A array_4
[root@mail ~]# array_4=([a1]=apple [a2]=pear) #a1,a2是数组的索引,即下标
[root@mail ~]# echo ${array_4[a1]}
apple
[root@mail ~]# echo ${array_4[a2]}
pear
[root@mail ~]# echo ${array_4[*]}
pear apple
[root@mail ~]# echo ${array_4[@]}
pear apple
[root@mail ~]# echo ${#array_4[a2]} #查看索引a2这个变量的长度
4
4.数组截取、替换
[root@mail ~]# array_5=(1 2 3 4 5 6)
[root@mail ~]# echo ${array_5[*]:2:2} #指从数组全部元素中第2个元素向后截取2个元素出来
3 4
[root@mail ~]# echo ${array_5[*]:2:4}
3 4 5 6
[root@mail ~]# array_41=${array_1[*]:2:2} #指从数组全部元素中第2个元素向后截取2个元素出来并赋给数组array_41
[root@mail ~]# echo ${array_41[*]}
3 4
[root@mail ~]# array_42=${array_5[*]/6/5} #将数组array_5中的6替换成5,然后将替换后的结果赋值给array_42
[root@mail ~]# echo ${array_42[*]}
1 2 3 4 5 5
5.for循环遍历数组
for i in ${array_t5[*]}
do
echo $i
done
#常用的三种方法
array_t6=($(ls /boot))
for i in ${array_t6[*]};do #以数组值的方式直接遍历数组
echo $i
done
for ((i=0;i<${#array_t6[*]};i++));do # 以数组变量个数的方式遍历数组
echo ${array_t6[$i]}
done
for i in ${!array_t6[*]};do # 以数组index的方式遍历数组
echo ${array_t6[$i]}
done