• echo "This is line $LINENO"返回行号


    echo "This is line $LINENO"返回行号

    LINENO

    变量LINENO返回它在脚本里面的行号。

    #!/bin/bash
    
    echo "This is line $LINENO"
    

    执行上面的脚本test.sh$LINENO会返回3

    $ ./test.sh
    This is line 3

    BASH_SOURCE

    变量BASH_SOURCE返回一个数组,内容是当前的脚本调用堆栈。该数组的0号成员是当前执行的脚本,1号成员是调用当前脚本的脚本,以此类推,跟变量FUNCNAME是一一对应关系。

    下面有两个子脚本lib1.shlib2.sh

    # lib1.sh
    function func1()
    {
      echo "func1: BASH_SOURCE0 is ${BASH_SOURCE[0]}"
      echo "func1: BASH_SOURCE1 is ${BASH_SOURCE[1]}"
      echo "func1: BASH_SOURCE2 is ${BASH_SOURCE[2]}"
      func2
    }
    
    # lib2.sh
    function func2()
    {
      echo "func2: BASH_SOURCE0 is ${BASH_SOURCE[0]}"
      echo "func2: BASH_SOURCE1 is ${BASH_SOURCE[1]}"
      echo "func2: BASH_SOURCE2 is ${BASH_SOURCE[2]}"
    }
    

    然后,主脚本main.sh调用上面两个子脚本。

    #!/bin/bash
    # main.sh
    
    source lib1.sh
    source lib2.sh
    
    func1
    

    执行主脚本main.sh,会得到下面的结果。

    $ ./main.sh
    func1: BASH_SOURCE0 is lib1.sh
    func1: BASH_SOURCE1 is ./main.sh
    func1: BASH_SOURCE2 is
    func2: BASH_SOURCE0 is lib2.sh
    func2: BASH_SOURCE1 is lib1.sh
    func2: BASH_SOURCE2 is ./main.sh
    

    上面例子中,执行函数func1时,变量BASH_SOURCE的0号成员是func1所在的脚本lib1.sh,1号成员是主脚本main.sh;执行函数func2时,变量BASH_SOURCE的0号成员是func2所在的脚本lib2.sh,1号成员是调用func2的脚本lib1.sh

    BASH_LINENO

    变量BASH_LINENO返回一个数组,内容是每一轮调用对应的行号。${BASH_LINENO[$i]}${FUNCNAME[$i]}是一一对应关系,表示${FUNCNAME[$i]}在调用它的脚本文件${BASH_SOURCE[$i+1]}里面的行号。

    下面有两个子脚本lib1.shlib2.sh

    # lib1.sh
    function func1()
    {
      echo "func1: BASH_LINENO is ${BASH_LINENO[0]}"
      echo "func1: FUNCNAME is ${FUNCNAME[0]}"
      echo "func1: BASH_SOURCE is ${BASH_SOURCE[1]}"
    
      func2
    }
    
    # lib2.sh
    function func2()
    {
      echo "func2: BASH_LINENO is ${BASH_LINENO[0]}"
      echo "func2: FUNCNAME is ${FUNCNAME[0]}"
      echo "func2: BASH_SOURCE is ${BASH_SOURCE[1]}"
    }
    

    然后,主脚本main.sh调用上面两个子脚本。

    #!/bin/bash
    # main.sh
    
    source lib1.sh
    source lib2.sh
    
    func1
    

    执行主脚本main.sh,会得到下面的结果。

    $ ./main.sh
    func1: BASH_LINENO is 7
    func1: FUNCNAME is func1
    func1: BASH_SOURCE is main.sh
    func2: BASH_LINENO is 8
    func2: FUNCNAME is func2
    func2: BASH_SOURCE is lib1.sh
    

    上面例子中,函数func1是在main.sh的第7行调用,函数func2是在lib1.sh的第8行调用的。

     
  • 相关阅读:
    最主要的商业模式
    Linux-清除rootpassword
    Drupal 关于节点(nodes)的理解
    hdu4240 求一条流量最大的路/(此题网上百分之90以上算法是错误的)
    LeetCode Next Permutation
    关于使用strtok的一个小问题
    SDUT--Pots(二维BFS)
    微信 小程序组件 滑动导航和获取元素实际高度
    微信 小程序组件 电话
    微信小程序组件 客服
  • 原文地址:https://www.cnblogs.com/xuanbjut/p/14139316.html
Copyright © 2020-2023  润新知