1. 向函数传递数组
如果将数组变量作为函数的参数,函数只会取数组变量的第一个值
testArray(){
echo "函数入参为:$@"
}
myarray=(1 2 3 4)
echo "原始数据为:${myarray[*]}"
testArray $myarray
输出为:
解决办法
- 将数组变量的值分解成单个的值,然后将这些值作为函数的参数使用。
- 在函数内部,将所有的参数重新组合成一个新的变量
testArray(){
echo "函数入参为:$@"
local newarray
newarray=($(echo "$@"))
echo "函数新的入参为:${newarray[*]}"
}
myarray=(1 2 3 4)
echo "原始数据为:${myarray[*]}"
testArray ${myarray[*]}
输出
2. 从函数返回数组
用$arg1变量将数组传给函数arraydblr
arraydblr函数将该数组重组到新的数组变量中
生成该输出数组变量的一个副本
对数据元素进行遍历,将数组元素翻倍,并将结果存入局部变量newarray中
函数arraydblr 使用echo语句来输出每个数组的元素的值
arraydblr(){
local origarray
local newarray
local elements
local i
origarray=($(echo "$@"))
newarray=($(echo "$@"))
elements=$[ $# - 1 ]
for (( i=0 ;i <= $elements; i++)){
newarray[$i]=$[${origarray[$i]} * 2]
}
echo ${newarray[*]}
}
myarray=(1 2 3 4)
echo "原始输入数组myarray为: ${myarray[*]}"
arg1=$(echo ${myarray[*]})
echo "新组成的输入数组arg1为: ${arg1[*]}"
result=($(arraydblr $arg1))
echo "函数返回数组为: ${result[*]}"