Shell|Shell 向函数传数组参数和返回数组

1. 向函数传递数组 如果将数组变量作为函数的参数,函数只会取数组变量的第一个值

testArray(){ echo "函数入参为:$@" }myarray=(1 2 3 4) echo "原始数据为:${myarray[*]}" testArray $myarray

输出为:
Shell|Shell 向函数传数组参数和返回数组
文章图片

解决办法
  1. 将数组变量的值分解成单个的值,然后将这些值作为函数的参数使用。
  2. 在函数内部,将所有的参数重新组合成一个新的变量
testArray(){ echo "函数入参为:$@" local newarray newarray=($(echo "$@")) echo "函数新的入参为:${newarray[*]}" }myarray=(1 2 3 4) echo "原始数据为:${myarray[*]}" testArray ${myarray[*]}

输出
Shell|Shell 向函数传数组参数和返回数组
文章图片

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[*]}"

【Shell|Shell 向函数传数组参数和返回数组】Shell|Shell 向函数传数组参数和返回数组
文章图片

    推荐阅读