让函数修改全局变量

时间:2014-10-21 11:20:06

标签: arrays bash function global-variables

我在bash中有一个函数,它将数组作为参数

在我的情况下,数组由“假”值组成

我在主脚本中定义了这个数组,然后我调用了函数

my_function my_array[@]

其中my_function以这种方式定义

function my_function(){
arg_array=("${!1}")

arg_array[2]="true"
}

但是如果我在主脚本中打印数组,我看到数组还没有 改性。实际上该函数修改了参数数组的“副本”和 不是数组本身。如何让函数修改源数组( 在其他编程语言中与“全局”变量有关..)?

感谢

1 个答案:

答案 0 :(得分:1)

实际上,您传递的是数组中每个元素的名称。只需传递数组本身的名称即可。然后使用declare使用间接参数扩展设置任何特定元素的值。

function my_function(){
    elt2="$1[2]"
    declare "$elt2=true"       
}

my_function my_array

bash 4.3中,命名引用使这更加简单。

function my_function () {
    declare -n arr=$1
    arr[2]=true
}

my_function my_array

但是,如果您打算将my_function用于不同的全局数组,那么这只是有意义的。如果my_function仅用于与全球my_array合作,那么您无法获得任何收益:只需按原样使用全球。

function my_function () {
    my_array[2]=true
}