是否有一种方法可以从父函数到达子函数中的局部变量?



作为bash学习的一部分,我正在尝试从父函数中捕获子函数中的局部变量,但没有成功。

child_function (){
declare -a child_arr="${1}"
}
parent_function (){
child_function "${ARR[@]}"
echo ${#child_arr[@]}
echo ${child_arr[*]}
}

ARR=("Cat" "Dog" "Dragon")
parent_function   # prints out 0 and nothing

是否有一种方法可以在不删除子函数中var的局部作用域的情况下获得局部变量?

不直接,因为局部变量的定义特性是它在定义它的作用域之外是不可见的。

然而,由于bash是动态作用域,因此从child_function内部调用的任何函数都可以访问child_function的局部变量。这表明,它可以指定一个函数供child_function调用,而不是parent_function访问数组。例如,
ARR=("Cat" "Dog" "Dragon")
# child_arr will come from a scope higher in the call stack
print_child_arr () {
echo ${#child_arr[@]}
echo ${child_arr[*]}
}
child_function (){
callback=$1
shift
declare -a child_arr=("${@}")
"$callback"
}
parent_function (){
child_function print_child_arr "${ARR[@]}"
}
parent_function

child_functionparent_function可以通过使用nameef:

来稍微简化。
child_function (){
callback=$1
declare -n child_arr=$2
"$callback"
}
parent_function (){
child_function print_child_arr ARR
}

相关内容

  • 没有找到相关文章

最新更新