首页 理论教育 函数变量及作用域-实用Linux Shell编程

函数变量及作用域-实用Linux Shell编程

时间:2023-11-18 理论教育 版权反馈
【摘要】:如果同名,它们会相互影响,因为函数内的变量默认同主程序的变量一样,都是全局变量。如果用内置命令local将函数里面的变量定义为局部变量,看看会是什么情况。函数local_b里面定义的b是局部变量,作用范围只在该函数内部。

函数变量及作用域-实用Linux Shell编程

在一个函数内可以定义变量,变量名可以与主程序的变量同名。如果同名,它们会相互影响,因为函数内的变量默认同主程序的变量一样,都是全局变量。

上面的脚本,主程序里将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,可读性好一些。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈