linux shell 脚本 获取当前函数名
linux bash shell 中
$FUNCNAME 得到当前函数名
${FUNCNAME[1]} 得到上一层函数名 如果上层没有函数调用 则为空
在C/C++中,__FUNCTION__常量记录当前函数的名称。有时候,在日志输出的时候包含这些信息是非常有用的。而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是,它是一个数组而非字符串,其中数组的第一个元素为当前函数的名称。
可能初看有点难以理解,为什么FUNCNAME要是一个数组呢?看看下面的例子,你就明白了。
#!/bin/bashfunction test_func()
{echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"another_funcecho "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
就可以派上用场了。
# If the script is sourced by another script
if [ -n "$BASH_SOURCE" -a "$BASH_SOURCE" != "$0" ]
thendo_something
else # Otherwise, run directly in the shelldo_other
fi
唯一遗憾的是,这种做法会让脚本失去一些可移植性,因为不是所有的shell都支持这些常量。
linux shell 脚本 获取当前函数名相关推荐
- Linux Shell脚本入门教程系列之(十五) Shell函数简介
本文是Linux Shell脚本系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之后,函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰 ...
- linux脚本编程延时函数,shell脚本编程之函数
技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.基本的脚本函数 脚本函数出现的目的:为了解决大型处理过程中,需要将相同的重复代码封装起 ...
- Linux Shell脚本 Linux C程序 获取指定的范围内 or 系统可用端口
Linux Shell脚本 && Linux C程序 获取指定的范围内 or 系统可用端口 一.源代码及其运行 1. Linux C程序getPort.c 源码 运行示例 2. 脚本文 ...
- Linux Shell脚本通过参数名传递参数
平常在写shell脚本都是用$1,$2-这种方式来接收参数,然而这种接收参数的方式不但容易忘记且不易于理解和维护.Linux常用的命令都可指定参数名和参数值,然而我们怎样才能给自己的shell脚本也采 ...
- Linux中 shell 脚本获取当前工作目录的方法
Linux中 shell 脚本获取当前工作目录的方法 1. 示例 2. 注意: 参考: 1. 示例 test.sh target_dir=$(cd $(dirname $0); pwd) echo $ ...
- shell脚本编程之函数
技术交流QQ群:1027579432,欢迎你的加入! 1.基本的脚本函数 脚本函数出现的目的:为了解决大型处理过程中,需要将相同的重复代码封装起来,提高代码的复用性. 函数是一个脚本代码块,你可以为其 ...
- Linux Shell 脚本知识点
正则表达式在线生成工具: http://tools.jb51.net/regex/create_reg 0. shell 调试 复制代码 代码如下: sh -x somefile.sh 在somefi ...
- 批量ping脚本shell_30个Linux Shell脚本经典案例(上)
在学习Linux运维时,普遍反馈是:Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法也都掌握了,但有需求时,很难直接上手编程,要么写了很久,要么写不好! 也有很多做运维很多年的 ...
- Linux Shell脚本入门教程系列之(三)Shell变量
本文是Linux Shell脚本系列教程的第(三)篇,更多shell教程请看:Linux Shell脚本系列教程 Shell作为一种高级的脚本类语言,也是支持自定义变量的.继上一篇之后,今天就为大家介 ...
最新文章
- 【原创视频教程】学生信息管理系统1--登陆
- 在Docker应用场景下 如何使用新技术快速实现DevOps
- wordpress漏洞_聊聊 WordPress 5.1.1 CSRF to RCE 漏洞
- GCC中的分支预测(likely和unlikey)
- 攻打医院服务器的SamSam勒索木马分析
- 截屏没有了_原来华为手机的截屏方法不止3种,用了这么久,现在才知道新玩法?...
- c++单链表【构造函数、运算符重载、析构函数、增删查改等】
- 树状数组的建树 单点修改 单点查询 区间修改 区间查询
- TensorFlow第五步:返回起点、深挖坑,解刨一个麻雀。
- ScheduledExecutorService线程调度的使用
- python安装pip之后 pip命令报错解决方法
- 第六届华为创新杯编程大赛第二轮(2014.4.29)
- 公司买的机器不能自己装系统,问对方几天没回一个字
- 半带滤波器 cic滤波器
- java 排班日历,排班日历
- 碎片(Fragments)
- 打造圣诞节H5游戏最强音
- Hyperledger Fabric 环境搭建报错
- 上善若水,水利万物而不争
- 网站使用手机相机_使用“互通相机”把你的iPhone手机变成Mac的心灵之窗!