如何获取或反映被调用的 bash 函数的名称?

如何获取或反映被调用的 bash 函数的名称?

我还没有找到解决方案。有人给点提示吗?

我有时会在 shell 脚本中编写 bash 函数,并且我喜欢让脚本变得冗长,而不仅仅是为了调试。所以有时我想在我的脚本中将被调用的 bash 函数的“名称”显示为“变量”。

我有时所做的只是设置一个包含函数名称的常规变量。像这样:

test ()
{
    funcName=test
    echo "function running..."
    echo "\$0 is : $0"
    echo "function name is : $funcName"
}

但这有点愚蠢。

还有更好的吗?

答案1

有时读一下就足够了man bash

函数名

一个数组变量,包含当前执行调用堆栈中的所有 shell 函数的名称。索引为 0 的元素是任何当前正在执行的 shell 函数的名称。最底部的元素(索引最高的元素)是“main”。该变量仅在 shell 函数执行时存在。对 FUNC-NAME 的赋值无效并返回错误状态。如果 FUNCNAME 未设置,它将失去其特殊属性,即使随后重置也是如此。

用法示例:

#!/usr/bin/env bash

func()
{
    echo I am inside "$FUNCNAME"
}

foo()
{
    echo I am inside "$FUNCNAME"
}

func
foo

相关内容