# ! /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

10-08 13:27