繁体   English   中英

使用来自“子”函数的局部变量

[英]Using local variables from "child" functions

考虑以下代码:

function child()
{
    echo $var
}

function parent()
{
    local var=5
    child
}

我已经在我的机器上对其进行了测试,它似乎可以工作,但是我找不到任何明确描述局部变量的这种用法的内容。 也就是说,当我在一个函数中声明一个局部变量并从该函数调用其他函数时,我是否可以在后者中使用该变量(甚至更深地嵌套它)? 它在 bash 中是否合法,它是否适用于所有版本?

bash使用动态范围。 childvar的值不是由定义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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM