作为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_function
和parent_function
可以通过使用nameef:
child_function (){
callback=$1
declare -n child_arr=$2
"$callback"
}
parent_function (){
child_function print_child_arr ARR
}