zoukankan      html  css  js  c++  java
  • shell中脚本变量和函数变量的作用域

    http://blog.csdn.net/ltx19860420/article/details/5570902

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

    #!/bin/bash
    ltx_func() {
       echo $v1
       v1=200 
    }
    v1=100
    ltx_func
    echo $v1
    结果:
    100
    200

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

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

    #!/bin/bash
    ltx_func() {
       v2=200 
    }
    ltx_func
    echo $v2
    结果:
    200

    解析:注意,不是从定义函数的地方开始,而是从调用函数的地方开始。打印命令在变量v2的作用域内,所以能够访问变量v2。

    #!/bin/bash
    ltx_func() {
       local v2=200 
    }
    ltx_func
    echo $v2
    结果:
    (空)

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

    #!/bin/bash
    ltx_func() {
       echo "param 1: $1"
    }
    ltx_func 100
    结果:
    100

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

    3. 如果同名,shell函数定义的local变量会屏蔽脚本定义的global变量。

    #!/bin/bash
    ltx_func() {
       echo $v1
       local v1=200 
       echo $v1
    }
    v1=200 
    ltx_func
    echo $v1
    结果:
    100
    200
    100

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

  • 相关阅读:
    使用Struts时,JSP中如何取得各个会话中的参数值?
    JUnit —— TestSuite 的使用
    如何修改 Ubuntu 的字符集?
    如何修改 VIM 制表符的空格数?
    最遥远的距离
    二分法求平方根(Python实现)
    Hadoop 学习之路之MapReduce原理
    JDK 1.8源码阅读 TreeMap
    JDK 1.8源码阅读 HashMap
    JDK 1.8源码阅读 HashSet
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/9114934.html
Copyright © 2011-2022 走看看