眼镜
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
不工作
#!/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]
原因
我想将多个数组传递给函数,但不希望与传入的数组和本地数组名称发生可能的名称冲突.
试着
如您所见,我尝试添加本地函数.我已经扫描了bash手册页,似乎无法找到任何可以提供我所希望的行为的东西
Bash -x结果
+ arr=(1 2 "3 4" 5)
+ myfunc 'arr[@]'
+ arr=("${!1}")
+ local arr
+ echo
如果需要更多信息,请告诉我.
最佳答案 恭喜你遇到了3.1系列bash中的一个错误.
从与bash-3.2-alpha版本相关的部分中的Bash ChangeLog:
This document details the changes between this version, bash-3.2-alpha,
and the previous version, bash-3.1-release.…
f. Fixed two bugs with local array variable creation when shadowing a variable
of the same name from a previous context.