shell脚本变量作用域的问题 财富值98

2016-10-12 14:11发布

学习shell脚本时,看到这么一个知识点:
【圆括号结构,能强制将其中的命令运行在子shell中】

现有测试脚本代码如下:

#圆括号结构用法   #!/bin/bash      echo "Father Shell is: $BASH_SUBSHELL"      #打印父shell的层次,为0   outervar=OUTER                              #父shell的变量outervar      (                                           #利用圆括号结构创建子shell       echo "SubShell is: $BASH_SUBSHELL"        #子shell的层次为1       (           echo "GrandSubShell is: $BASH_SUBSHELL" #孙shell的层次为2       )        innervar=INNER                            #子shell的变量       echo "innervar=$innervar"       echo "outervar=$outervar"                 #outervar继承了符shell所赋给它的值   )                                           #回到父shell      echo "Father Shell is: $BASH_SUBSHELL"         if [ -z "$innervar" ]                      #子shell中定义变量为空,则说明   then     echo "The $innervar is not defined in main body."   else      echo "The $innervar is defined in main body."   fi

输出结果如下图

问题:为什么脚本中语句echo "outervar=$outervar"可以获取到上一层shell所设立的变量outervar=OUTER?

PS:我记得必须使用export使一个变量变为shell的环境变量,子shell才能获取到。这里并没有使用 export outervar=OUTER ,但是也获取到值了

1条回答
bbjbbj - 这个人很懒,什么都没留下
1楼 · 2016-10-12 14:41.采纳回答

bash中变量默认是全局变量,无论这个变量是在什么位置(在函数中也一样),如果要使用局部变量,需要使用 local例如:

一周热门 更多>