如果将数组作为函数的参数,函数只会取数组变量的第一个值
#!/bin/bash
#数组在函数中传参
test() {
echo "函数接收到的参数列表为:$@"
newarr=($*)
echo "新数组的值为:${newarr[@]}"
}
##########main#########
arr=(10 20 30 40 50 60)
echo "原始数组的值为:${arr[@]}"
test $arr

可以将数组拆分成列表传参到函数中,然后在函数中重新组成一个新的数组
#!/bin/bash
#数组在函数中传参
test() {
echo "函数接收到的参数列表为:$@"
newarr=($*)
echo "新数组的值为:${newarr[@]}"
}
##########main#########
arr=(10 20 30 40 50 60)
echo "原始数组的值为:${arr[@]}"
test ${arr[*]}

#!/bin/bash
#数组在函数中传参
test() {
echo "函数接收到的参数列表为:$@"
newarr=($*)
sum=0
for i in ${newarr[*]}
do
sum=$[$sum + $i]
done
echo "数组所有元素的累加值为:$sum"
}
##########main#########
arr=(10 20 30 40 50 60)
echo "原始数组的值为:${arr[@]}"
test ${arr[*]}

#!/bin/bash
#从函数返回数组,并将数组中元素值*2,再以新数组形式输出
test () {
newarr=(`echo $@`)
length=${#newarr[@]}
for ((i=0; i<$length; i++))
do
newarr[$i]=$[${newarr[$i]} * 2]
done
echo ${newarr[@]}
}
#########main#############
array=(10 20 30 40 50 60)
echo "原始数组的值为:${array[@]}"
result=(`test ${array[@]}`)
echo "新数组的值为:${result[@]}"

1、数组在函数中传参时,如果使用数组直接调用函数,则函数只会取数组变量的第一个值
2、如果想要函数取数组变量的所有值的话,则需要在传参时,先将数组转化为列表形式,将其全部传到函数中,再在函数中重新定义一个新的数组
原文:https://www.cnblogs.com/weq0805/p/15047133.html