Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将数组传递给函数名冲突 规格_Arrays_Linux_Bash_Function - Fatal编程技术网

Arrays 将数组传递给函数名冲突 规格

Arrays 将数组传递给函数名冲突 规格,arrays,linux,bash,function,Arrays,Linux,Bash,Function,GNU bash,版本3.1.17(不可能升级) 前提 我一直在摆弄数组,我想知道是否有任何方法可以让函数的局部变量与函数外部的数组同名 例子 在下面的示例中,我将尝试显示该问题 工作 #!/bin/bash arr=(1 2 "3 4" 5) # Make global array myfunc() { local args=("${!1}") # Using different name for declaration

GNU bash,版本3.1.17(不可能升级)


前提 我一直在摆弄数组,我想知道是否有任何方法可以让函数的局部变量与函数外部的数组同名


例子 在下面的示例中,我将尝试显示该问题

工作

#!/bin/bash
arr=(1 2 "3 4" 5)   # Make global array

myfunc()
{
    local args=("${!1}")  # Using different name for declaration
        echo ${args[@]}  # Echo new array


}
    myfunc arr[@]  # Pass array to function
输出

1 2 3 4 5
[Blank]
不起作用

#!/bin/bash

arr=(1 2 "3 4" 5) # Create array

myfunc()
{
    local arr=("${!1}") #Not working
        echo ${arr[@]} # Not working


}
    myfunc arr[@] # Pass array to function
输出

1 2 3 4 5
[Blank]

理由 我希望将多个数组传递给函数,但不希望与传入的数组和本地数组名发生名称冲突


尝试 正如您在上面看到的,我已经尝试添加了本地函数。我已经扫描了bash手册页,似乎找不到任何其他可以提供我所设计的行为的东西

Bash-x结果



如果需要更多信息,请告诉我。

祝贺您在3.1系列bash中遇到了错误

在与bash-3.2-alpha版本相关的部分中:

本文档详细介绍了此版本bash-3.2-alpha和, 以及之前的版本bash-3.1-release

f。修正了隐藏变量时创建局部数组变量的两个错误 与以前的上下文同名


您的第二个代码片段工作正常。看见函数中
${arr[@]}
缺少引号意味着你正在破坏你的空间,但这是另一个问题。你的bash版本是什么?@EtanReisner我真的不介意破坏空间,但它确实不起作用。我不知道bash的版本是否与此有关(尽管我对此表示怀疑)。@rici GNU bash,版本3.1.17,很抱歉回复得太晚。@EtanReisner好的,所以我尝试了
GNU bash,版本3.2.51
,它可以工作,知道为什么它不能在
3.1.17
上吗?谢谢你的回答,真的很感谢你到处找这个!现在我知道,如果我再次陷入困境,未来该往哪里看:)