繁体   English   中英

范围界定如何适用于局部变量?

[英]How does scoping works for local variables?

我一直认为local变量是块范围的,但有趣的是以下工作

f() {
    if true; then
        local red=red
    fi

    echo "$red"
}

那么Bash中的local变量如何作用呢?

man bash说:

可以使用local内置声明函数本地的变量。 这些变量仅对函数及其调用的命令可见。

此外,关于local Bash内置的部分解释:

local

 local [option] name[=value] … 

对于每个参数,将创建名为name的局部变量,并为其指定value 该选项可以是declare接受的任何选项。 local只能在函数内使用; 它使变量name具有仅限于该函数及其子函数的可见范围。

在Bash中没有块范围:-(

不,bash中的local变量是函数作用域而不是块作用域。 还要记住, local关键字不适用于函数之外的任何其他地方。

red='notred'
f() {
    if true; then
        local red=red
    fi
    echo "$red"
}

现在,如果你运行该功能

f; echo "$red"
red                # From the function's scope
notred             # From global scope

与实际问题并不完全相关,但在使用local关键字时,一个专业提示始终将初始化与赋值分开。 虽然这可能听起来微不足道,但如果在这种情况下使用不当

f() {
    if local boolean=$(false); then
        echo 'not cool!'
    fi
}

f() {
    local boolean
    if boolean=$(false); then
        echo 'not cool!'
    fi
}

一样,后者总是首选。 因为local本身是一个内置的bash并且具有自己的返回码,即成功分配时为0。 在第二种情况下,由于赋值和初始化是分开的,我们确保local不会扫描false命令返回的失败退出代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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