shell编程向函数传递数组

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

大家都知道 向函数中传递参数 可以用$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





  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值