如何将数组传递给 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 -n
与 declare -n
相似,因为它不提供数组的本地 copy,而是提供本地 指向原始内容的指针。在此示例中,如果您更改 $arr[]
,您实际上是在更改原始数组 $a[]
.
将数组内容传递给函数的传统方法在 Whosebug 上已经被描述了很多次,几乎不值得一提;你会毫不费力地找到例子。
我有一个 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 -n
与 declare -n
相似,因为它不提供数组的本地 copy,而是提供本地 指向原始内容的指针。在此示例中,如果您更改 $arr[]
,您实际上是在更改原始数组 $a[]
.
将数组内容传递给函数的传统方法在 Whosebug 上已经被描述了很多次,几乎不值得一提;你会毫不费力地找到例子。