数组
定义
- 数组是一列数的集合,我们使用索引来区分它
- 索引是从0开始的,0 1 2 3 4 …
数组定义方法
方法一
- 数组名=(value0 value1 value2 …)
方法二
- 数组名=([0]=value [1]=value [2]=value …)
方法三
- 列表名=“value0 value1 value2 …”
- 数组名=($列表名)
方法四
- 数组名[0]=“value”
- 数组名[1]=“value”
- 数组名[2]=“value”
数组内容的查看
使用echo来查看
echo ${a[*]}
数组包含的数据类型
- 数值类型
- 字符类型
使用" "或’ '定义
获取数组长度
a=(1 2 3 4 5)
a_long=$(#a[*]) #将获取长度赋值给某个变量,这样平时使用更加方便
echo $a_long
获取某下标赋值
arr_index2=${arr[2]}
echo $arr_index2
数组遍历
#!/bin/bash
a=(1 2 3 4 5)
for v in $ {a [e]}
do
echo $v
done
数组切片
arr=(1 2 3 4 5)
echo ${arr[@] } #输出整个数组
echo $ {arr[@] :0:2} 获取${数组名〔@或*]:起始位置:长度}的值
echo ${arr1[ * ] :1 :3}
echo ${arr[0]: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= (1 2 3 4 5)
unset arr[2] #删除第三个元素
echo $ {arr[* ]}
数组增加新的数
方法一:
array _name [ index]=value
方法二:
array _name [${#array_name [@] } ]=value
方法三:
array_name=("$ {array name [ 0] } " value1 ... valueN)
双引号不能省略,否则,当数组array name中存在包含空格的元素时会按空格将元素拆分成多个
不能将"@"替换为"*",如果替换为",不加双引号时与"e"的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素加到数组中
方法四:
array name+= (value1 ... valueN)
待添加元素必须用"()“包围起来,并且多个元素用空格分隔
这里个人呢建议使用第四种,方便快捷,bug还少
向函数传数组参数
test() {
echo "接收到的参数列表:$@"
newa=$1
echo "新数组的值为:${newa[*]}"
}
a=(3 2 1 4 5)
echo "原始数组的值为:${a[*]}"
test1 $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[*]}"
resultl=`test2 ${a[*]}`
echo "原始数组的和为:$resultl"
result2=(`test3 ${a[*]}`)
echo "新数组的值为:${result2[*]}"