将数组传递给函数名冲突

时间:2015-07-30 15:05:00

标签: 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
        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 Results

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

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

1 个答案:

答案 0 :(得分:2)

恭喜你发现3.1系列bash中的错误。

来自与bash-3.2-alpha版本相关的部分中的Bash ChangeLog

  

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

     

...

     

F。修复了在隐藏变量时使用局部数组变量创建的两个错误       来自先前背景的同名。