如何将数组传递给 Bash 函数?

How to pass an array into a Bash function?

我有一个 Bash 脚本,但我不知道如何在其中引用变量。 任何帮助将不胜感激。

此代码完美运行:

myfunction() {
    for i in "${BASE_ARRAY[@]}"
    do

我想将我的数组名称作为变量传递给函数,以便我可以将它与其他数组一起使用。这是我尝试失败的代码:

myfunction() {
    for i in "${[@]}"
    do

然后我将以下内容传递给函数:

myfunction BASE_ARRAY

试试这个:

myfunction() {
    local x="[@]"
    for i in "${!x}"
    do

Bash 中的间接引用看起来像 "${!VARIABLE_CONTAINING_NAME_TO_EXPAND}”。对于不是数组的变量来说很简单。

但是当您需要访问数组中的一个项目(或您的情况下的所有项目)时,您需要将整个引用放在要扩展的变量中。

我从未成功地将 数组 传递给函数。

对我来说,这两个选项总是将 content 传递给一个函数,或者(自 bash 4.3 起)传递一个数组名,该数组名将被访问一个参考。考虑以下示例。

#!/usr/bin/env bash

myfunc() {
        local -n arr=
        printf '%s\n' "${arr[1]}"
        arr[1]=HELLO
}

a=(one two three)

myfunc a
printf '%s\n' "${a[1]}"

产生:

$ ./sample
two
HELLO

请注意,local -ndeclare -n 相似,因为它不提供数组的本地 copy,而是提供本地 指向原始内容的指针。在此示例中,如果您更改 $arr[],您实际上是在更改原始数组 $a[].

将数组内容传递给函数的传统方法在 Whosebug 上已经被描述了很多次,几乎不值得一提;你会毫不费力地找到例子。