bash - 将数组传递给 bash 函数

标签 bash

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

我尝试了以下方法,但没有成功:

arr=(a b c)
my_func $arr

还有

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

最佳答案

传递 "${arr[@]}" (@quickshiftin 的答案)是可行的,但需要注意的是,它不会传递数组,但数组的元素作为单独的参数,可以被调用的函数访问,如$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

关于bash - 将数组传递给 bash 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20725985/

相关文章:

regex - grep -E {,1} 显示出现次数超过 1 次的结果

linux - Shell脚本从5个不同的目录获取数据

bash - 如何在 bash 脚本上匹配单个字符

bash - 如何在 vagrant ssh bash 中配置颜色

linux - bash 脚本 : how to diff two files after stripping prefix from each line?

Git-hooks 预推脚本不通过 STDIN 接收输入

bash - 如何使用 Bash 为变量引用文件?

bash - ls:如何在每一行显示目录+文件名

string - 在 if 语句中带有变量的 bash 通配符

bash - 仅当“git diff”输出某些内容时,如何运行另一个 git 命令?