我有很多经常相互嵌套的函数。为了简单的调试目的,我决定使用 bash
提供的 FUNCNAME
环境变量数组来跟踪代码流程。下面是示例代码:
test1(){ test2;}
test2(){ test3;}
test3(){ test4;}
test4(){ echo ${FUNCNAME[@]};}
输出如下所示:
test4 test3 test2 test1
这非常清楚地显示了嵌套,但是如果您使用 ctr+c
终止该函数,然后再次运行它,FUNCNAME
不会刷新,因此输出可能看起来像像这样(取决于您何时终止它):
test4 test3 test2 test1 test3 test2 test1
我尝试手动清除或取消设置
FUNCNAME
,但随后得到空输出。关于如何解决这个问题有什么想法吗?
最佳答案
有些人可能会说这个问题是一个功能,而不是一个错误。如果堆栈中的任何函数崩溃,您可以 echo ${funcname[@]}
查看崩溃发生的位置。最终结论是:该问题被报告为错误,并在 bash
v4.4.0 中修复。
关于arrays - bash $FUNCNAME 数组没有被清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32732344/