例子1:

#!/bin/bash

function test() {
    #先输出变量 d_o_f
    echo "d_o_f:" $d_o_f 
    #函数内定义的变量 d_i_f 和 d_o_f
    d_i_f="defined in function"
    d_o_f="modified in function"
    #函数内定义后,输出两个变量
    echo "d_i_f:" $d_i_f
    echo "d_o_f:" $d_o_f
}

echo "---out fucntion---"
#函数外部定义变量d_o_f
d_o_f="defined out function"
echo "d_o_f:" $d_o_f
echo "---in function---"
test
echo "---out function---"
echo "d_i_f:" $d_i_f
echo "d_o_f:" $d_o_f

输出:

---out fucntion---
d_o_f: defined out function
---in function---
d_o_f: defined out function
d_i_f: defined in function
d_o_f: modified in function
---out function---
d_i_f: defined in function
d_o_f: modified in function

由上面的输出可以看出,

1、函数内是可以访问全局变量,并且对全局变量的修改会真正改变全局变量的值。

2、函数内定义的变量也是全局变量,也就是说函数外可以访问。


例子2:

#!/bin/bash

function test() {
    #设置d_o_f为局部变量
    local d_o_f
    #设置d_i_f为局部变量
    local d_i_f
    #输出变量d_o_f
    echo "d_o_f:" $d_o_f
    #函数内定义变量
    d_i_f="defined in function"
    d_o_f="modified in function"
    echo "d_i_f:" $d_i_f
    echo "d_o_f:" $d_o_f
}

echo "---out fucntion---"
#函数外部定义变量d_o_f
d_o_f="defined out function"
echo "d_o_f:" $d_o_f
echo "---in function---"
test
echo "---out function---"
echo "d_i_f:" $d_i_f
echo "d_o_f:" $d_o_f

输出:

---out fucntion---
d_o_f: defined out function
---in function---
d_o_f:
d_i_f: defined in function
d_o_f: modified in function
---out function---
d_i_f:
d_o_f: defined out function

从结果中可以看出关键词local起作用了。

1、对一个与全局变量同名的局部变量修改不会影响全局变量的值。

2、在函数外不能访问一个局部变量。