您的位置:首页 > 其它

第6章创建函数-----------(向函数传递数组、从函数返回数组)

2017-03-14 00:00 253 查看

6.4数组变量与函数

6.4.1向函数传递数组

向脚本函数传递数组变量。如果试图将数组变量作为单个参数传递,是无法正常工作的。操作实例如下:

#!/bin/bash
#数组当作单个参数传递是无法工作的
function testit {
echo "The parameters are:$@"
thisarray=$1
echo "The received arrray is ${thisarray[*]}"
}

#创建数组并给数组赋值
myarray=(1 2 3 4 5)
#输出数组内容
echo "The original array is:${myarray[*]}"
#调用参数并传参
testit $myarray




如果试图将数组变量作为函数参数使用,那么函数只提取数组变量的第一个取值。要解决这个问题,必须将数组变量拆分为单个元素,然后使用这些元素的值作为函数参数。函数内部可以再将这些参数重组为新数组变量。

#!/bin/bash
#函数使用数组变量
function testit {
local newarray
newarray=(`echo "$@"`)
echo "The new array value is :${newarray[*]}"
}

myarray=(1 2 3 4 5)
echo "The original array is ${myarray[*]}"
testit ${myarray[*]}




该脚本使用变量$myarray存放所有数组值,并将它们都放在函数命令行。函数命令行随后根据命令行参数重建数组变量。这样,函数内部可以像其他数组一样使用这个数值。

#!/bin/bash
#对数组内的元素进行累加
function addarray {
local sum=0
local newarray
newarray=(`echo "$@"`)
for value in ${newarray[*]}
do
sum=$[ $sum + $value ]
done
echo $sum
}

myarray=(1 2 3 4 5)
echo "The original array is :${myarray[*]}"
arg1=`echo ${myarray[*]}`
result=`addarray $arg1`
echo "The result is $result"




函数addarray对数组数据递推求和。任意数目的值都可以放在数组变量myarray中,并且函数addarray将对其求和。

6.4.2从函数返回数组

从函数想shell脚本回传数组变量。函数使用echo语句以恰当顺序输出数组各元素的值,然后脚本必须将这些数据重组为新数组变量

#!/bin/bash
#从函数返回数组
function 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 5)
echo "The original array is:${myarray[*]}"
arg1=`echo ${myarray[*]}`
result=(`arraydblr $arg1`)
echo "The new array is:${result[*]}"




这个脚本用变量arg1将数组值传递给函数arraydblr。函数arraylr将该数组重组为新数组变量,并将后者复制后作为输出数组变量。然后,该函数对数组变量的元数据做递推,每个元素值双倍,将其存放到复制的函数数组变量中。之后,函数arraydblr使用echo语句输出数组变量的各元素值。脚本将函数arraydblr的输出按照数据重组为新数组变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐