有时候 ,可能需要向函数中传递 数组,这个时候,就需要向 函数中传递数组, 本文以排序为例,简单的演示如何向函数 传递数组。
大家都知道 向函数中传递参数 可以用$1 这个变量即可。 但是 如果 要传递数组 可能不行哦。 直接看下面的例子
#!/bin/bash
function mytestfun (){
newarray=$1
echo "the received array is ${newarray[*]}"
}
arr=(1 2 3 4 5)
mytestfun ${arr}
这里 我向mytestfun 传入一个数组 作为第一个参数。结果如下:
可以看到 此时 只是把数组的 第一个元素 传了进来,数组并没有传进来。
正确的写法 如下:
#!/bin/bash
# 如何向函数传递数组
#
# 对数组 排序
function sort(){
local newarr
newarr=(` echo "$@" `)
len=${#newarr[@]}
for((i=0; i<$len-1; i++)){
for((j=0; j<$len-1-i; j++)){
if [[ ${newarr[j]} -gt ${newarr[j+1]} ]];
then
temp=${newarr[j]}
newarr[j]=${newarr[j+1]}
newarr[j+1]=$temp
fi
}
}
echo ${newarr[*]}
}
# 用户输入数组
#read -p "please input an array " -a arr
arr=(1 3 5 45 6 78 2 7 23)
args=`echo ${arr[*]}`
arr=(`sort ${args}`)
# 打印数组
for item in ${arr[*]};
do
echo $item |tr '\n' ' '
done
正确的做法, 是这样, 先把数组 转成一个 类似字符串的东西, args ,之后把args 这个 ’数组‘ 字符串 扔给被调用函数sort() ,在sort 内部 通过`echo $@` 转成 shell数组,这样就可以 操作, 数组了。此时 在函数内部完成排序,但此时 排序的是 newarr ,原来的顺序 并没有改变, 怎么办呢?
"$@"将命令行参数视为单独的字符串, 代表所有的参数位置,但是代表各位置参数组成的串行.
这时候需要把数组 在通过函数 返回出去, 这里我使用echo 返回字符串。 arr=(`sort ${args}`) 再把字符串 转成 数组, 这样就相当于把数组 又传递出来了。
可以看出 shell 编程 它的处理方式,是把数组当成 字符串进行传递,之后在传出字符串。
总结: 本文主要讲解了,数组 如何在函数中传递,包括传入和传出。
分享快乐,留住感动。 2017年 10月 06日 星期五 20:06:27 ---biaoge