Bash编程009——数组
9.1 数组定义
所谓数组,是指将具有相同类型的若干变量按照顺序组织起来的数据类型。
在之前的变量一节,提到过可以使用declare或者typeset定义一个变量为数组。或者可以直接指定数组中的元素值来定义一个新的数组变量。
bash中的数组下标从零开始。
# 定义arr为索引数组
declare -a arr
# 定义arr为关联数组
declare -A arr
# 为arr[0]赋值
arr[0]=10
# 为arr[hello]赋值
arr[hello]="world"
使用数组中的值,格式:${myarray[index]},$myarray相当于${myarray[0]},即数组的第一个元素。
以元素值集合的形式为数组赋值,格式:
arr=( var0 var1 var2 ... varn )
# 示例
arr=(1 2 3 4 5 6)
# 输出所有元素,两种方式都可以,但是有区别
echo "${arr[@]}"
echo "${arr[*]}"
通过键值对的形式为数组赋值
arr=([0]=var1 [1]=var2 ... [n]=varn)
# 示例
arr=([0]=100 [1]=200 [2]=300)
echo ${arr[*]}
# 结果
100 200 300
注:若采用这种形式为关联数组赋值,需要先用declare定义
declare -A myArray
myArray=([Unicom]=10010 [TELECOM]=10000 [Mobile]=10086)
echo ${myArray[*]}
9.2 访问数组
通过${#array[@]}或${#array[*]}来获取一个数组的长度
array=(0 1 2 3 4 5)
echo ${#array[@]}
# 输出:6
echo ${#array[*]}
# 输出:6
简单的遍历索引数组
array=(0 1 2 3 4 5)
for ((i=0;i<${#array[*]};i++))
do
echo ${array[$i]}
done
# 输出:
0
1
2
3
4
5
array=(0 1 2 3 4 5)
for i in ${array[*]}
do
echo $i
done
# 输出:
0
1
2
3
4
5
遍历关联数组:通过${!myarray[@]} 注:不能用${!myarray[*]}
declare -A myarray
myarray[a]=0
myarray[b]=1
myarray[c]=2
for i in "${!myarray[@]}"
do
echo "key : $i"
echo "value: ${myarray[$i]}"
done
# 输出:
key : a
value: 0
key : b
value: 1
key : c
value: 2
在数组末尾追加元素
declare -a array
array=(0 1 2 3 4 5 6)
for i in {7..10}
do
array[${#array[*]}]=$i
done
echo ${array[@]}
# 输出:0 1 2 3 4 5 6 7 8 9 10
获取部分数组元素
可以通过切片获取部分数组元素,格式:
${array[@|*]:start:length}
示例:
# 删除原有的数组
unset nums
nums=(0 1 2 3 4 5 6 7)
newnums=${nums[@]:1:4}
echo ${newnums[@]}
# 输出:1 2 3 4
9.3 替换删除数组元素
数组元素替换,可以将某个数组元素的部分内容用其他字符来替代
基本语法:
${array[@|*]/pattern/replacement}
示例:
unset array
array=("test1.txt" "hello.txt" "word.txt")
echo "${array[@]/.txt/.c}"
# 输出:test1.c hello.c word.c
使用unset可以删除数组中的某个元素或者整个数组
# 删除数组中的某个值
unset array[n]
# 删除整个数组
unset array