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

本文介绍如何在Shell脚本中正确地处理数组,包括向函数传递整个数组及从函数返回数组的方法。通过示例展示了如何避免仅传递数组首元素的问题,以及如何在函数内部操作数组并返回处理后的数组。
1560

被折叠的 条评论
为什么被折叠?



