# ! /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()中a的范围和可见性相同吗?这是因为我们正在从函数abc()调用pqr吗?我原以为新变量会在pqr中创建,并显示空白值(因为这是变量作用域和可见性在现代语言中的工作方式,所以我很好奇这在bash中是如何工作的)
我知道在上面的例子中,如果我在pqr()中重新声明一个inside,那么将创建一个新变量,并因此显示空值。提前谢谢!!!
最佳答案
如评论中所述(摘自man bash
):
当在函数中使用local
时,它会导致变量名的可见范围限制为该函数及其子函数。
因此从pqr
内调用abc
意味着变量$a
在两个函数内都可见。
值得一提的是,由于您正在使用bash特有的特性,比如local
和不可移植的function
语法,您应该将shebang改为#!/bin/bash
。