如果将数组作为函数的参数,函数只会取数组变量的第一个值
#!/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