zoukankan      html  css  js  c++  java
  • shell脚本中局部变量

    在shell中定义函数可以使代码模块化,便于复用代码。不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题。

    (1)Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止。

    例1:脚本变量的作用域
    #!/bin/bash
    #define the function ltx_func
    ltx_func()
    {
       echo $v1
       #modify the variable v1
       v1=200
    }
    #define the variable v1
    v1=100
    #call the function ltx_func
    ltx_func
    echo $v1

    结果:
    100
    200
    解析:脚本变量v1的作用域从被定义的地方开始,到shell结束。调用函数ltx_func的地方在变量v1的作用域内,所以能够访问并修改变量v1。

    (2)Shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束或被显示删除处为止。函数定义的变量可以被显示定义成local的,其作用域局限于函数内。但请注意,函数的参数是local的。

    例2:函数定义的global变量
    #!/bin/bash
    #define the function ltx_func
    ltx_func()
    {
       #define the variable v2
       v2=200
    }
    #call the function ltx_func
    ltx_func
    echo $v2

    结果:
    200
    解析:函数变量v2默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束为止。注意,不是从定义函数的地方开始,而是从调用函数的地方开始。打印命令在变量v2的作用域内,所以能够访问变量v2。

    例3:函数定义的local变量
    #!/bin/bash
    #define the function ltx_func
    ltx_func()
    {
       #define the local variable v2
       local v2=200
    }
    #call the function ltx_func
    ltx_func
    echo $v2

    结果:
    (空)
    解析:函数变量v2显示定义为local的,其作用域局限于函数内。打印命令在函数外,不在变量v2的作用域内,所以不能访问变量v2。

    例4:函数参数是local变量
    #!/bin/bash
    #define the function ltx_func
    ltx_func()
    {
       echo "param 1: $1"
    }
    #call the function ltx_func
    ltx_func 100

    结果:
    100
    解析:函数参数是local的,通过位置变量来访问。打印命令输出函数的第一个参数。

    (3)如果同名,Shell函数定义的local变量会屏蔽脚本定义的global变量

    例5:同名local变量屏蔽global变量
    #!/bin/bash
    #define the function ltx_func
    ltx_func()
    {
       echo $v1
       #define the local variable v1
       local v1=200
       echo $v1
    }
    #define the global variable v1
    v1=100

    #call the function ltx_func
    ltx_func
    echo $v1

    结果:
    100
    200
    100
    解析:global变量v1的作用域从被定义的地方开始,到shell结束。调用函数ltx_func的地方在变量v1的作用域内,所以能够变量v1。函 数又定义了同名的local变量v1,同名local变量屏蔽global变量,所以函数第二次打印访问的是local变量。退出函数后再次打印v1,此 时函数定义的local变量已经消失,访问的是global变量。

  • 相关阅读:
    Java面试题(01)
    HTML学习笔记16——尺寸的表示_px、%、em三种
    HTML学习笔记14——HTML 有语义的标签3_字符实体
    HTML13_有语义的标签2_a标签(超链接,锚点,伪类)
    HTML学习笔记12——HTML 有语义的标签1(h,p标签,img标签,列表,表格_制作课程表)
    HTML学习笔记11——CSS 初始化
    HTML学习笔记9——CSS精确控制背景图片位置——background-position
    HTML学习笔记8——CSS设置背景图片
    CSS控制文字的一些基本属性的使用
    HTML学习笔记5——盒模型(这里有棵圣诞树。)
  • 原文地址:https://www.cnblogs.com/qiangupc/p/4062003.html
Copyright © 2011-2022 走看看