数组
数组是一列数的集合,我们使用索引来区分它
数组定义方法
第一种
数组名=(value0 value1 value2 ...)
第二种
数组名=([0]=value [1]=value [2]=value ...)
第三种
列表名="value0 value1value2 ...."
数组名=($列表名)
第四种
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
数组内容查看
echo ${数组名[*]}
数组的数据类型
数值类型
字符类型:使用" "或’ '定义
获取数组长度
arr_number=(1 2 3 4 5)
arr_length=${#arr_number[*]}
${#arr_number [@]}
echo $arr_length
读取下标赋值
arr_index2=${arr_number[2]}
echo $arr_index2
数组遍历
#!/bin/bash
arr_number=(1 2 3 4 5)
for v in ${arr_number[@]} in默认以空格为分割
do
echo $v
done
数组切片
arr=(1 2 3 4 5)
echo ${arr[@]} 输出整个数组
echo ${arr[@]:0:2} 获取${数组名[@或*]:起始位置:长度}的值
echo ${arr[@]:2:3}
数组替换
arr=(1 2 3 4 5)
echo ${arr[@]/4/66} $(数组名[@或*]/查找字符/替换字符)
echo ${arr[@]} 不会替换数组原有内容
arr=(${arr[@]/4/66}) 要实现改变原有数组,可通过重新赋值实现
echo ${arr[@]} 相当于创造了一个新的数组
数组删除
arr=(1 2 3 4 5)
unset arr #删除数组
echo ${arr[*]}
arr=(12345)
unset arr [2] #删除第三个元素
echo ${arr[*]}
数组追加元素
第一种
array_name [index]=value
第二种
array_name[${#array_name [@]}]=value
第三种
array_name=("${array_name[@]}" value1... valueN)
双引号不能省略,否则,当数组array_name中存在包含空格的元素时会按空格将元素拆分成多个
不能将"@“替换为”",如果替换为"",不加双引号时与"@"的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素添加到数组中
第四种
array_name+=(value1 ... valueN)
待添加元素必须用"()"包围起来,并且多个元素用空格分隔
向函数传数组参数
将数组变量作为函数参数,函数只会取数组变量的第一个值
zzz() {
echo "接收到的参数列表:$@"
newa=$1
echo "新数组的值为:${abc[*]}"
}
a=(3 2 1 4 5)
echo "原始数组的值为:${a[*]}"
zzz1 $a
从函数返回数组
test2(){
newa=(`echo $@`)
sum=0
for value in ${newa[*]}
do
sum=$[$sum + $value]
done
echo $sum
}
test3() {
newa=(`echo $@`)
for ((i=0;i<=$[$# - 1];i++))
{
newa[$i]=$[${newa[$i]} * 2]
}
echo ${newa[*]}
}
a=(3 2 1 4 5)
echo "原始数组的值为:${a[*]}"