如果我将数组传递给函数:
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] 举报,一经查实,本站将立刻删除。