bash shell变量作用域

发布时间:2020-01-15编辑:脚本学堂
有关bash shell变量作用域的用法,bash shell的两种作用域(全局作用域与局部作用域)的用法,有关bash变量作用域的几个例子。

bash 有两种作用域一种是全局作用域,即默认所声明的变量;
另外一种则是局部作用域,用local关键字声明的变量。

linux shell/ target=_blank class=infotextkey>shell脚本编程中,用好变量作用域,可以写出更优质高效的脚本。

1)全局变量声明
 

复制代码 代码示例:
#!/bin/bash 
mm=12 #visible globally 
func() { 
    mn=34  #visible globally 
    echo "mc=${mc}" #is visible 

mc=35  #visible globally 
# echo "mn={$mn}"  #is not visible 
func 
echo "mm=${mm};mn=${mn};mc=${mc}" 
 

但是在函数中声明的全局变量mn,在主函数没有被调用前,是不可见的。

2) 局部作用域,声明变量时,在前面添加local关键字,并且只能应用在函数里面,其作用域只是在当前函数块,及其子函数内可见。
 

复制代码 代码示例:
#!/bin/bash 
func1() { 
    local loc1=11 
    echo "func1 loc1=${loc1}" #is visible 

func2() { 
    echo "func2 loc1=${loc1}"  #is visible 

func1 
echo "local loc1:${loc1}" #not visible 
 

有一种特殊的情形: 当局部变量的声明和设置在一个单一命令行时,显示操作的顺序是,先设置变量,再限制变量的作用范围,这一结果体现在返回值上。

例子:
 

复制代码 代码示例:
#!/bin/bash 
t=$(exit 1) 
echo $?  #  return 1 
echo "t=${t}" 
func() { 
    t1=$(exit 1) 
    echo $?     #  return 1 
    echo "t1=${t1}" 
    local t2=$(exit 1) 
    echo $? #  return 0 
    echo "t2=${t2}" 
    local t3 
    t3=$(exit 1) 
    echo $?  #  return 1 
    echo "t3=${t3}" 

func()