【发布时间】:2016-07-30 17:10:19
【问题描述】:
# ! /bin/sh
function pqr()
{
# This prints value to 10 even though variable is local inside a
echo "Displaying value of var a $a"
}
function abc()
{
local a=10
# call function pqr and don't pass value of a
pqr
}
即使我没有将变量 a 传递给 pqr() 函数,我在 pqr() 中得到 a=10。我的问题是 pqr() 中 a 的范围和可见性与 abc() 的范围和可见性相同吗?这是因为我们从函数 abc() 调用 pqr() 吗?我期待新变量会在 pqr 中创建并显示空白值。(因为这是变量范围和可见性在现代语言中的工作方式,所以我很好奇这在 bash 中是如何工作的) 我明白在上面的例子中,如果我在 pqr() 内部重新声明,那么新变量将被创建并因此显示空白值。提前谢谢!!!
【问题讨论】:
-
"这是因为我们从函数 abc() 调用 pqr() 吗?" - 是的:-)
-
local的手册中提到“它使变量 NAME 具有仅限于该函数及其子函数的可见范围。” -
大多数现代语言都是词法范围的。但是,
bash是动态范围的。