一 含义
数组的每个元素的分隔符一定是空格
用于区分数组的各个元素的数字编号称为下标。元素的下标从0开始。
组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。
二 定义数组
方法1.
数组名=(value0 value1 value2 ...)
方法2.使用下标值定义每个元素
数组名=([0]=value1 [1]=value2 [2]=value3 ...)
方法3.先定义一个字符串列表,再引用列表的值定义数组
列表名="value1 value2 value3 value4 value5 ..."
数组名=($列表名)
方法4.通过下标值,一个一个定义数组内的每个元素。同时也可以通过这种方式修改元素的值。
数组名[0]=value1
数组名[1]=value2
数组名[2]=value3
数组名[3]=value4
三 数组的常用操作
1.获取数组的数据列表(获取所有元素的值)
echo ${数组名[@]} 或者 echo ${数组名[*]}
注意:如果只是用普通变量的方式查看的,那么只会显示数组的第一个元素值
2.查看一个数组内的某一个元素的值
${数组名[x]} x代表元素的下标
例子:echo ${数组名[0]} 含义:获取数组内第一个元素的值(即下标是0的元素值)
echo ${数组名[5]} 含义:获取数组内第六个元素的值(即下标是5的元素值)
注意:当定义数组时 跳过某一个下标 查看该下标时,会显示为空
3.获取数组的长度
echo ${#数组名[*]} 或者 echo ${#数组名[@]}
4. 如何查看属主的最后一个元素
获取数组的长度 length=${#数组名[@]}
由于起始下标为0 所以数组长度减1 last=$[$length-1]
查看最后一个元素值 echo ${数组名[$last]}
(注意:此方式查看最后一个元素值,可以判断数组的下标是否完整,若其中跳过某一些下标,则此方法无法取得最后一个元素值
四 数组元素操作
一。数组元素的切片
${数组名[@]:起始位置:截取长度} 起始位置从0下标算起
${数组名[@]} 获取整个数组的元素值
例子:
${数组名[@]:0:3} 从下标为0的元素值开始截取,总共截取3个元素
${数组名[@]:1:2} 从下标为1的元素值开始截取,总共截取2个元素
二。临时替换 (不会替换原来的数组)
echo ${数组名[@]/旧字符/新字符} 替换所有元素中能够匹配到的字符
三。永久替换 (重新对数组进行赋值)
数组名=(${数组名[@]/旧字符/新字符})
四。删除数组的某个元素
unset 数组名[n] n为数组的下标值
五。删除整个数组
unset 数组名[*] 或者 unset 数组名[@]
六。扩写数组,增加数组内的元素
方法1:
数组名[n]=元素值 使用下标直接赋值增加元素
方法2:
数组名+=(元素1 元素2 .....)
方法3:
数组名[数组长度]=元素值 注意:数组里如果有空余的下标,使用此方法会替换原数组的某一个元素
方法1:
方法2:
方法3:
七。使用for遍历输出数组的每个元素值
八。查看所有的数组
命令:declare -a
九。将数组的值传给函数(传参)
第一步:向函数传入数组的时候需要先把数组转换成列表作为函数的参数使用:
函数名 ${数组名1[@]}
第二步:在函数内把传入的列表重新组合成数组:
数组名2=($@)
第三步:在函数外重新组合成数组:
数组名3=(`函数名 ${数组名1[@]}`)
(1)获取数组的数据列表作为函数的参数使用
#!/bin/bash
xxx1 () {
#不能写$1,否则只会输出数组的第一个元素
echo "函数接收到的参数为:$@"
#在函数内把传入的列表重新组合成数组
newarr=($@)
echo "新数组的值为:${newarr[@]}"
}
#### main ####
arr=(1 2 3 4 5)
echo "原数组的值为:${arr[@]}"
#把数组转换成列表作为函数的参数使用
xxx1 ${arr[@]}
(2)使用for循环,令新数组内的每个元素值乘2 i<=数组长度减1
#!/bin/bash
xxx2 () {
#在函数内把传入的列表重新组合成数组
newarr=($@)
echo "新数组的值为:${newarr[@]}"
# ${#newarr[@]} 为数组的长度
for ((i=0;i<=${#newarr[@]}-1;i++))
do
newarr[$i]=$[${newarr[$i]}*2]
done
echo "每个元素值翻倍后为:${newarr[@]}"
}
#### main ####
arr=(1 2 3 4 5)
echo "原数组的值为:${arr[@]}"
#把数组转换成列表作为函数的参数使用
xxx2 ${arr[@]}