当一个函数调用另一个内部bash shell时的局部变量范围

时间:2016-04-09 12:05:13

标签: bash function shell

# ! /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()中得到一个= 10。我的问题是a的范围和可见性在pqr()内部与abc()相同吗?这是因为我们从函数abc()调用pqr()吗?我期待在pqr中创建新变量并显示空白值。(因为这是变量范围和可见性在现代语言中的工作原理所以我很好奇这是如何在bash中工作的) 我理解在上面的例子中如果我重新声明一个内部pqr(),那么将创建新变量,从而显示空白值。在此先感谢!!!

1 个答案:

答案 0 :(得分:5)

如评论中所述(来自man bash):

  

在函数中使用local时,会导致变量名称的可见范围仅限于该函数及其子函数。

pqr内调用abc意味着变量$a在两个函数中都可见。

值得一提的是,由于您使用的是特定于bash的功能,例如local和非便携式function语法,因此您应该将shebang更改为#!/bin/bash