[英]Using local variables from "child" functions
考虑以下代码:
function child()
{
echo $var
}
function parent()
{
local var=5
child
}
我已经在我的机器上对其进行了测试,它似乎可以工作,但是我找不到任何明确描述局部变量的这种用法的内容。 也就是说,当我在一个函数中声明一个局部变量并从该函数调用其他函数时,我是否可以在后者中使用该变量(甚至更深地嵌套它)? 它在 bash 中是否合法,它是否适用于所有版本?
bash
使用动态范围。 child
中var
的值不是由定义child
位置决定的,而是由调用它的位置决定的。 如果child
的主体中没有本地定义,则 shell 查找的下一个位置是调用child
的函数的主体,依此类推。 local
修饰符在该调用的局部函数中创建一个变量,因此它不会影响任何封闭范围内的变量值。 但是,它对任何封闭的范围都是可见的。
a () { echo "$var"; }
b () { local var="local value"; a; }
var="global value"
a # outputs "global value"
b # outputs "local value"
只是赞美用户 123 在评论中已经提到的内容
从 bash 手册页
函数的局部变量可以用 local 内置命令声明。 通常,变量及其值在函数及其调用者之间共享。
bash3.2.25->cat function.ss
#!/bin/bash
function child()
{
echo "child function called"
echo $var
}
function parent_global()
{
echo "parent_global called, child invoked outside parent"
var=5
}
function parent()
{
echo "parent called, child invoked inside parent"
local var=5
child
}
parent
parent_global
child
bash3.2.25->./function.ss
parent called, child invoked inside parent
child function called
5
parent_global called, child invoked outside parent
child function called
5
因此,除非另有说明(本地内置函数),变量在函数作用域之外是可见的,如果您愿意,则是全局变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.