shell编程向函数传递数组

来源:互联网 发布:自动注音软件 编辑:程序博客网 时间:2024/06/11 21:11

有时候 ,可能需要向函数中传递 数组,这个时候,就需要向 函数中传递数组, 本文以排序为例,简单的演示如何向函数 传递数组。

大家都知道 向函数中传递参数 可以用$1 这个变量即可。 但是 如果 要传递数组 可能不行哦。 直接看下面的例子


#!/bin/bashfunction  mytestfun (){newarray=$1echo "the received array is ${newarray[*]}"}arr=(1 2 3 4 5)mytestfun ${arr}

这里 我向mytestfun  传入一个数组 作为第一个参数。结果如下:


可以看到 此时 只是把数组的 第一个元素 传了进来,数组并没有传进来。

正确的写法 如下:

#!/bin/bash# 如何向函数传递数组 ## 对数组 排序 function  sort(){local newarrnewarr=(` 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 arrarr=(1 3 5 45 6 78 2 7 23)args=`echo ${arr[*]}`arr=(`sort  ${args}`)# 打印数组for item in  ${arr[*]};doecho $item |tr '\n'  ' 'done

正确的做法, 是这样, 先把数组 转成一个 类似字符串的东西, args  ,之后把args 这个 ’数组‘ 字符串 扔给被调用函数sort() ,在sort  内部  通过`echo $@`  转成 shell数组,这样就可以 操作, 数组了。此时 在函数内部完成排序,但此时 排序的是 newarr ,原来的顺序 并没有改变, 怎么办呢?

 "$@"将命令行参数视为单独的字符串, 代表所有的参数位置,但是代表各位置参数组成的串行.



这时候需要把数组 在通过函数 返回出去, 这里我使用echo 返回字符串。 arr=(`sort  ${args}`)  再把字符串 转成 数组, 这样就相当于把数组 又传递出来了。

可以看出 shell 编程 它的处理方式,是把数组当成 字符串进行传递,之后在传出字符串。




总结: 本文主要讲解了,数组 如何在函数中传递,包括传入和传出。



                                分享快乐,留住感动。                                                                   2017年 10月 06日 星期五 20:06:27   ---biaoge





原创粉丝点击