[英]How does scoping works for local variables?
我一直认为local
变量是块范围的,但有趣的是以下工作
f() {
if true; then
local red=red
fi
echo "$red"
}
那么Bash中的local
变量如何作用呢?
不,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.