我有一个Bash脚本,我无法弄清楚如何引用变量。 任何帮助将不胜感激。
此代码完美无缺:
myfunction() {
for i in "${BASE_ARRAY[@]}"
do
我想将数组的名称作为变量传递给函数,以便我可以将其与其他数组一起使用。这是我尝试失败的代码:
myfunction() {
for i in "${$1[@]}"
do
然后我将以下内容传递给函数:
myfunction BASE_ARRAY
答案 0 :(得分:7)
我从未成功将数组传递给函数。
对我来说,这两个选项总是将 content 传递给一个函数,或者(自bash 4.3开始)传入一个数组名称,该名称将使用引用进行访问。请考虑以下示例。
#!/usr/bin/env bash
myfunc() {
local -n arr=$1
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
类似,因为它不提供数组的本地副本,而是提供本地指针到原始内容。在此示例中,如果您更改$arr[]
,则实际上是在更改原始数组$a[]
。
传统的将数组内容传递给函数的方法已经多次在StackOverflow中进行了描述,几乎没有提到;你可以毫无困难地找到例子。
答案 1 :(得分:4)
试试这个:
myfunction() {
local x="$1[@]"
for i in "${!x}"
do
Bash中的间接引用看起来像"${!VARIABLE_CONTAINING_NAME_TO_EXPAND}
"。对于非数组的变量,它很简单。
但是当你需要访问数组中的项目(或者你的情况下的所有项目)时,你需要将整个引用放在要扩展的变量中。