Bash 获取当前函数名
2016-06-22 14:09
471 查看
原文地址:http://kodango.com/get-function-name-in-bash
##########################################################################################################################
在C/C++中,__FUNCTION__常量记录当前函数的名称。有时候,在日志输出的时候包含这些信息是非常有用的。而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是,它是一个数组而非字符串,其中数组的第一个元素为当前函数的名称。
可能初看有点难以理解,为什么FUNCNAME要是一个数组呢?看看下面的例子,你就明白了。
执行后的结果为:
所以,更加准确地说,FUNCNAME是一个数组,但是bash中会将它维护成类似一个堆栈的形式。
与FUNCNAME相似的另外一个比较有用的常量是BASH_SOURCE,同样是一个数组,不过它的第一个元素是当前脚本的名称。
这在source的时候非常有用,因为在被source的脚本中,$0是父脚本的名称,而不是被source的脚本名称。而BASH_SOURCE
就可以派上用场了。
唯一遗憾的是,这种做法会让脚本失去一些可移植性,因为不是所有的shell都支持这些常量。
##########################################################################################################################
在C/C++中,__FUNCTION__常量记录当前函数的名称。有时候,在日志输出的时候包含这些信息是非常有用的。而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是,它是一个数组而非字符串,其中数组的第一个元素为当前函数的名称。
可能初看有点难以理解,为什么FUNCNAME要是一个数组呢?看看下面的例子,你就明白了。
#!/bin/bash function test_func() { echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})" another_func echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})" } function another_func() { echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})" } echo "Out of function, \$FUNCNAME => (${FUNCNAME[@]})" test_func echo "Out of function, \$FUNCNAME => (${FUNCNAME[@]})"
执行后的结果为:
Out of function, $FUNCNAME => () Current test_func, $FUNCNAME => (test_func main) Current another_func, $FUNCNAME => (another_func test_func main) Current test_func, $FUNCNAME => (test_func main) Out of function, $FUNCNAME => ()
所以,更加准确地说,FUNCNAME是一个数组,但是bash中会将它维护成类似一个堆栈的形式。
与FUNCNAME相似的另外一个比较有用的常量是BASH_SOURCE,同样是一个数组,不过它的第一个元素是当前脚本的名称。
这在source的时候非常有用,因为在被source的脚本中,$0是父脚本的名称,而不是被source的脚本名称。而BASH_SOURCE
就可以派上用场了。
# d2a7 If the script is sourced by another script if [ -n "$BASH_SOURCE" -a "$BASH_SOURCE" != "$0" ] then do_something else # Otherwise, run directly in the shell do_other fi
唯一遗憾的是,这种做法会让脚本失去一些可移植性,因为不是所有的shell都支持这些常量。
相关文章推荐
- adb shell 如何选择特定的设备?
- shell命令-grep
- shell eval命令使用
- Shell的sort
- linux shell脚本读取用户输入的参数
- Shell脚本return、echo、printf
- jmeter BeanShell实例-----两个变量之间的断言对比
- 使用ant直接执行shell命令
- c 嵌入 shell
- shell --- 相关简单程序规整
- 使用powershell远程传输文件
- xshell 缺少MSVCP110.dll
- shell 脚本各种执行方式(source ./*.sh, . ./*.sh, ./*.sh)的区别
- Shell使用技巧
- shell脚本:简单的分数记录系统
- shell基本应用(二)shell变量的使用
- shell知识点整理
- shell--流程控制
- shell脚本练习题
- shell--输入输出