我在bash中有一个函数,它将数组作为参数
在我的情况下,数组由“假”值组成
我在主脚本中定义了这个数组,然后我调用了函数
my_function my_array[@]
其中my_function以这种方式定义
function my_function(){
arg_array=("${!1}")
arg_array[2]="true"
}
但是如果我在主脚本中打印数组,我看到数组还没有 改性。实际上该函数修改了参数数组的“副本”和 不是数组本身。如何让函数修改源数组( 在其他编程语言中与“全局”变量有关..)?
感谢
答案 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
}