【摘要】:如果同名,它们会相互影响,因为函数内的变量默认同主程序的变量一样,都是全局变量。如果用内置命令local将函数里面的变量定义为局部变量,看看会是什么情况。函数local_b里面定义的b是局部变量,作用范围只在该函数内部。
在一个函数内可以定义变量,变量名可以与主程序的变量同名。如果同名,它们会相互影响,因为函数内的变量默认同主程序的变量一样,都是全局变量。
上面的脚本,主程序里将b赋值为180并显示其值;然后调用函数global_b,在函数内部,b被赋值为200并显示其值;接着在主程序里再显示b的值。看看执行结果:
因为函数里面的变量b和主程序的变量b,实际上是同一个b——全局变量b,所以在函数内对一个全局变量赋值,就是对主程序的同一个变量赋值,结果主程序最后一句显示b的值为200。
如果用内置命令local将函数里面的变量定义为局部变量,看看会是什么情况。
函数local_b里面定义的b是局部变量,作用范围只在该函数内部。主程序的变量b与函数里面的变量b虽然名字相同但不是同一个b。不难理解脚本的执行结果:
在函数内定义变量,前面加declare时,与加local效果一致,也是将变量定义为局部变量,看脚本fun_declare_local.sh及其运行结果就明白了:(www.xing528.com)
运行fun_declare_local.sh:
在函数内用declare-g定义变量时,变量为全局(global)变量,看下面的脚本及其运行结果就明白了:
运行fun_declare_global.sh:
在一个函数内,直接定义一个变量,或者用declare -g定义变量,都是将变量定义为全局变量。显然,用declare -g,可读性好一些。在一个函数内,定义一个变量时,前面加上local或者declare,都是将变量定义为局部变量。显然,用local,可读性好一些。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。