微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 你可以将一个数组传递给一个函数,但只使该函数的一个参数接收整个数组吗?

如果我将数组传递给函数

func()
{
    echo $1
    echo $2
    echo $3
}

myArray=("This" "Is" "An Array")
func "${myArray[@]}"

然后,数组的每个元素都将传递给函数的单独参数.

有没有办法只让函数一个参数接收整个数组?

解决方法:

你可以,有点. Bash和ksh93有名称引用,它们有点像指针,允许你将数组名称传递给函数,并从那里使用它,比如说:

#!/bin/bash    
function byname {
        typeset -n _p=$1
        echo "second item of '$1' is ${_p[1]}"
        echo "second arg to this function is \"$2\""
}
blah=(a b c)
byname blah "other arg"

虽然在Bash中,nameref的名称(此处为_p)必须与它指向的变量的名称不同,因此它对递归函数不是很有用.在ksh中,它仅在ksh样式函数中使用相同的名称(函数foo而不是foo()).

正如标签所说,这是一个引用而不是副本,因此如果您在函数修改数组,则更改将显示在主程序中.

一个更糟糕的选择是将数组连接到一个字符串,并将其作为变量传递:

function concated {
        echo "the whole array is \"$1\""
}
concated "${blah[*]}"

但是,除非你想出一些精心设计的数组到字符串打包的系统,否则这几乎就会破坏使用数组的重点.

以上调用当然打印:

second item of 'blah' is b
second arg to this function is "other arg"
the whole array is "a b c"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐