zoukankan      html  css  js  c++  java
  • 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行调用的。

     
  • 相关阅读:
    wstngfw中配置snort
    ROUTE: route addition failed
    putty和psftp命令行参数
    a2 Bluebottle OS
    Project Oberon
    【批处理学习笔记】第二十五课:间接传递
    【批处理学习笔记】第二十四课:直接传递
    Java异常抛出及try,catch应用实例
    【Python学习笔记之二】浅谈Python的yield用法
    【批处理学习笔记】第二十三课:用户变量和变量引用
  • 原文地址:https://www.cnblogs.com/xuanbjut/p/14139316.html
Copyright © 2011-2022 走看看