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 脚本 获取当前函数名相关推荐

  1. Linux Shell脚本入门教程系列之(十五) Shell函数简介

    本文是Linux Shell脚本系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之后,函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰 ...

  2. linux脚本编程延时函数,shell脚本编程之函数

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.基本的脚本函数 脚本函数出现的目的:为了解决大型处理过程中,需要将相同的重复代码封装起 ...

  3. Linux Shell脚本 Linux C程序 获取指定的范围内 or 系统可用端口

    Linux Shell脚本 && Linux C程序 获取指定的范围内 or 系统可用端口 一.源代码及其运行 1. Linux C程序getPort.c 源码 运行示例 2. 脚本文 ...

  4. Linux Shell脚本通过参数名传递参数

    平常在写shell脚本都是用$1,$2-这种方式来接收参数,然而这种接收参数的方式不但容易忘记且不易于理解和维护.Linux常用的命令都可指定参数名和参数值,然而我们怎样才能给自己的shell脚本也采 ...

  5. Linux中 shell 脚本获取当前工作目录的方法

    Linux中 shell 脚本获取当前工作目录的方法 1. 示例 2. 注意: 参考: 1. 示例 test.sh target_dir=$(cd $(dirname $0); pwd) echo $ ...

  6. shell脚本编程之函数

    技术交流QQ群:1027579432,欢迎你的加入! 1.基本的脚本函数 脚本函数出现的目的:为了解决大型处理过程中,需要将相同的重复代码封装起来,提高代码的复用性. 函数是一个脚本代码块,你可以为其 ...

  7. Linux Shell 脚本知识点

    正则表达式在线生成工具: http://tools.jb51.net/regex/create_reg 0. shell 调试 复制代码 代码如下: sh -x somefile.sh 在somefi ...

  8. 批量ping脚本shell_30个Linux Shell脚本经典案例(上)

    在学习Linux运维时,普遍反馈是:Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法也都掌握了,但有需求时,很难直接上手编程,要么写了很久,要么写不好! 也有很多做运维很多年的 ...

  9. Linux Shell脚本入门教程系列之(三)Shell变量

    本文是Linux Shell脚本系列教程的第(三)篇,更多shell教程请看:Linux Shell脚本系列教程 Shell作为一种高级的脚本类语言,也是支持自定义变量的.继上一篇之后,今天就为大家介 ...

最新文章

  1. 【原创视频教程】学生信息管理系统1--登陆
  2. 在Docker应用场景下 如何使用新技术快速实现DevOps
  3. wordpress漏洞_聊聊 WordPress 5.1.1 CSRF to RCE 漏洞
  4. GCC中的分支预测(likely和unlikey)
  5. 攻打医院服务器的SamSam勒索木马分析
  6. 截屏没有了_原来华为手机的截屏方法不止3种,用了这么久,现在才知道新玩法?...
  7. c++单链表【构造函数、运算符重载、析构函数、增删查改等】
  8. 树状数组的建树 单点修改 单点查询 区间修改 区间查询
  9. TensorFlow第五步:返回起点、深挖坑,解刨一个麻雀。
  10. ScheduledExecutorService线程调度的使用
  11. python安装pip之后 pip命令报错解决方法
  12. 第六届华为创新杯编程大赛第二轮(2014.4.29)
  13. 公司买的机器不能自己装系统,问对方几天没回一个字
  14. 半带滤波器 cic滤波器
  15. java 排班日历,排班日历
  16. 碎片(Fragments)
  17. 打造圣诞节H5游戏最强音
  18. Hyperledger Fabric 环境搭建报错
  19. 上善若水,水利万物而不争
  20. 网站使用手机相机_使用“互通相机”把你的iPhone手机变成Mac的心灵之窗!

热门文章

  1. 云原生微服务架构的技术内涵
  2. C 家族程序设计语言发展史
  3. IPython4_Notebook
  4. c语言结构体复习笔记
  5. esnext:最后一个参数后面也允许加逗号了
  6. LeetCode-334. Increasing Triplet Subsequence
  7. React.js再探(四)
  8. Oracle提示错误消息ORA-28001: the password has expired
  9. 最大输入hdu 2534 规律水题 求任意个a,b的和 不能表示的最大的数
  10. Python零基础学习代码实践 —— 提取字符串里面的单词数