【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、参数

  函数参数为局部类型,只能在当前函数内部使用。

原文地址:https://www.cnblogs.com/szhb-5251/p/7904642.html