Answers:
从Bash参考手册:
功能名称
一个数组变量,包含当前在执行调用堆栈中的所有shell函数的名称。索引为0的元素是任何当前正在执行的Shell函数的名称。最底部的元素(具有最高索引的元素)是“ main”。该变量仅在执行Shell函数时存在。分配给FUNCNAME无效,并返回错误状态。如果未设置FUNCNAME,则即使随后将其重置,它也会丢失其特殊属性。
此变量可以与BASH_LINENO和BASH_SOURCE一起使用。FUNCNAME的每个元素在BASH_LINENO和BASH_SOURCE中都有相应的元素来描述调用堆栈。例如,从文件$ {BASH_SOURCE [$ i + 1]}在行号$ {BASH_LINENO [$ i]}处调用了$ {FUNCNAME [$ i]}。内置呼叫方使用此信息显示当前呼叫堆栈。
当不带索引访问bash数组时,将返回该数组的第一个元素,因此$FUNCNAME
在简单情况下可以提供当前当前函数的名称,但它也包含调用堆栈中的所有其他函数。例如:
# in a file "foobar"
function foo {
echo foo
echo "In function $FUNCNAME: FUNCNAME=${FUNCNAME[*]}" >&2
}
function foobar {
echo "$(foo)bar"
echo "In function $FUNCNAME: FUNCNAME=${FUNCNAME[*]}" >&2
}
foobar
将输出:
$ bash foobar
In function foo: FUNCNAME=foo foobar main
foobar
In function foobar: FUNCNAME=foobar main
[0]
如果通过访问未修饰的变量隐式添加,为什么还要添加?
我${FUNCNAME[0]}
用来打印当前函数名称
获取函数名称的最简单方法(从函数内部)
echo $0
###
您的答案。
FUNCNAME
数组和其他Bash变量的Bash日志记录框架:github.com/codeforester/base/blob/master/lib/stdlib.sh。请参阅功能log_debug_enter
和log_debug_leave
特别。