在shell脚本中定义函数时,曾被局部变量,全局变量搞的头昏脑胀的。于是就写了两个脚本尝试了一下。首先看第一个例子
#!/bin/bash function test() { 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="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、函数内定义的变量也是全局变量,也就是说函数外可以访问。
接着我们修改一下代码:
#!/bin/bash function test() { local d_o_f local d_i_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="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、在函数外不能访问一个局部变量。