将数组传递给函数名称冲突

眼镜

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


前提

我一直在与数组搞乱,我想知道是否有任何方式有一个variables本地的一个函数与所述函数外的数组相同的名称。


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

加工

#!/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 

不工作

 #!/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 

产量

 [Blank] 

原因

我想传递多个数组到该函数,但不希望有一个可能的名称冲突与传入的数组和本地数组的名称。


试着

正如你可以看到上面我已经尝试添加本地function。 我已经扫描了bash手册页,似乎无法find任何可以提供我想要的行为的东西

Bash -x结果

 + arr=(1 2 "3 4" 5) + myfunc 'arr[@]' + arr=("${!1}") + local arr + echo 

如果需要更多的信息,请让我知道。

恭喜你已经击中了3.1系列bash中的一个bug。

从有关bash-3.2-alpha版本的章节中的Bash ChangeLog :

本文档详细介绍了此版本bash-3.2-alpha和以前版本bash-3.1-release之间的更改。

F。 修正了在创建本地数组变量时创建的两个错误。