【问题标题】:Store the name of a function into a variable将函数名称存储到变量中
【发布时间】:2019-06-03 09:34:24
【问题描述】:

我一直在尝试将函数的名称存储到变量中,但只是名称。

doReturn() {

    if [ $? -eq 0 ]; then
        /bin/echo -e " \e[1;31mOk!\e[0m"
    else
        /bin/echo -e " \e[1;31mFAIL!\e[0m"
        $? = fail
        echo $fail

        exit 1;
    fi
}

我想让“doReturn”做一个 if 或类似的东西说:“程序在这里结束”。我不知道我是在扮演上帝还是什么

我尝试过使用 sed 和 $?,但没有任何效果

doReturn() {

    if [ $? -eq 0 ]; then
        /bin/echo -e " \e[1;31mOk!\e[0m"
    else
        /bin/echo -e " \e[1;31mFAIL!\e[0m"
        $? = fail
        echo $fail

        exit 1;
    fi
}

我没有尝试使用 sed。快把我逼疯了。

【问题讨论】:

  • 你不能分配给$?
  • 不,也许我做得不对。不管怎样,$? 只是捕获了错误,对吗?
  • 设置$? 的等价物是简单地运行具有已知退出值的命令。例如,运行 false 会在子 shell 中将 $? 设置为 1. In general, run exit`。 (exit 57) 会将 $? 设置为 57。

标签: linux bash


【解决方案1】:

来自man bash

FUNCNAME 变量的第一个元素在函数执行时设置为函数的名称。

因此,如果可移植性不重要,您可以使用${FUNCNAME[0]}

【讨论】:

  • 但是${FUNCNAME[0]}你必须告诉位置否则它会捕获它?
  • ${FUNCNAME[0]} 在您输入函数时自动设置,并在您从它们返回时弹出 FUNCNAME 数组。只要您从要捕获其名称的函数内部进行设置,就可以将变量设置为该值。
  • 这就是问题所在。从一个函数中,我调用另一个函数,它会告诉我是否有任何问题,如果出现问题,该子函数必须记录父函数名称和错误。报错不是问题,cus$?抓到了,但问题出在函数名上
  • 如果是调用相关错误检测函数的函数名称,您可能可以使用${FUNCNAME[1]}
  • 去看看。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多