【Shell】--- shell脚本中变量的类型及作用域
一直对shell脚本有一种特殊的感觉,因此花了一段时间学习,本人擅长C语言编程,深受C语言荼毒,在学习其他任何类似于编程语言的东东的时候,都会不自觉的与C进行对比,因此对于shell中的变量的作用域一直有点疑问,在此总结一下:
首先,脚本的变量声明相比于C来说还是比较简单好用的,跟python有的一拼,没有那么复杂的用法,直接说明然后使用,无论是字符串还是数字都一样。但是本着严谨的态度,对于变量的声明和使用,还是希望有需要的时候声明使用,不需要的时候,立马舍弃丢掉,一刻不多留,这就需要了解shell中变量的作用域问题。
1、全局变量
在shell中,默认的变量作用域是全局类型的。
1 #!/bin/bash 2 3 declare -i tmp1=10 4 5 function fun1(){ 6 echo $tmp1; 7 tmp2=100; 8 } 9 10 ### START HERE ### 11 fun1 12 13 echo $tmp2
直接上代码,tmp1这种在函数体外文件内声明的变量,毫无疑问属于全局变量,其作用域应从定义的地方开始一直到脚本结束。而tmp2在这里也属于gloabl变量,其作用域应在第一次调用fun1()函数的地方开始,到脚本结束。
可得:在没有任何限定说明的情况下,shell默认变量属于全局类型
2、局部变量
以上述代码为例,假设第7行tmp2=100,修改为declare -i tmp2=100,最终运行结果将不会输出tmp2=100,说明函数体内采用declare修饰的变量属于局部变量,作用域仅限于该函数体内部。
local:显式声明某变量为局部变量,函数体内凡是带有locall修饰的变量,均为局部。(注意:如果局部变量与全局变量同名,则局部会覆盖全局变量)
3、参数
函数参数为局部类型,只能在当前函数内部使用。