微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

arrays – 将数组传递给函数名冲突

眼镜

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐