将数组传递给bash函数

时间:2013-12-22 03:34:57

标签: bash

有没有办法将数组作为单个参数传递给函数?

我尝试了以下无效的方法:

arr=(a b c)
my_func $arr

以及

arr(a b c)
my_func ${arr[*]}

2 个答案:

答案 0 :(得分:4)

传递"${arr[@]}"(@ quickshiftin的答案)类似的工作,但重要的是要注意它不传递数组,但数组的元素作为单独的参数< / em>,可以将调用的函数作为$1$2,...

访问

这具有以下含义:

  • 在调用的函数中,你必须自己将参数重新组装回一个数组(虽然这很容易做到:reassembledArray=( "$@" )
  • 如果输入数组稀疏,即其索引不连续,则此信息将丢失。

缺点:没有办法传递数组这样

也就是说,如果你正在调用函数而不是脚本,你的函数将可以访问当前shell中的所有变量,所以你可以简单地< em>直接访问函数调用之前在同一个shell中定义的数组变量。

示例:

my_func() {
  echo "Elements of arr:"
  for el in "${arr[@]}"; do echo "[$el]"; done
}

arr=(a b c)
my_func

答案 1 :(得分:1)

像这样调用函数

 my_func "${arr[@]}"