默认情况下,bash 中的每一个变量对于每一个函数、脚本,甚至是外部 shell(如果你是在脚本中声明变量的话)都是全局的。

如果你想让你的变量成为某个函数的局部变量,你可以使用 local 来让变量成为一个独立于全局范围的新变量,它的值只能在该函数中被访问。

Section 58.1: 全局变量

var="hello"
function foo(){
    echo $var
}

foo

显然会输出 “hello”,但反过来也可以:

function foo() {
    var="hello"
}

foo
echo $var

也会输出 "hello

Section 58.2: 局部变量

function foo() {
    local var
    var="hello"
}

foo
echo $var

不会输出任何内容,因为 var 是函数 foo 的局部变量,从函数 foo 外部看不到它的值。

Section 58.3: 将两者混合在一起

var="hello"

function foo(){
    local var="sup?"
    echo "inside function, var=$var"
}

foo
echo "outside function, var=$var"

将输出

inside function, var=sup?
outside function, var=hello