获取zsh中调用函数的名称
我想在shell脚本中获取函数调用方名称,在bash中它与获取zsh中调用函数的名称,zsh,Zsh,我想在shell脚本中获取函数调用方名称,在bash中它与${FUNCNAME[1]} ${FUNCNAME[1]}是一个(调用方名称) ${FUNCNAME[0]}是c(当前名称) 但它在zsh中不起作用 我想知道在函数c中调用哪个函数 function a(){ c } function b(){ c } function c(){ #if a call me; then... #if b call me; then... } 函数调用堆栈位于变量$
${FUNCNAME[1]}
${FUNCNAME[1]}
是一个(调用方名称)
${FUNCNAME[0]}
是c(当前名称)
但它在zsh中不起作用
我想知道在函数c中调用哪个函数
function a(){
c
}
function b(){
c
}
function c(){
#if a call me; then...
#if b call me; then...
}
函数调用堆栈位于变量
$funcstack[]
中
$ f(){echo $funcstack[1];}
$ f
f
因此,在c
中,调用函数(a
或b
)是$funcstack[2]
或者更方便的$funcstack[-1]
通用解决方案
- 无论数组索引是从0开始(选项
)还是从1开始(默认值),都有效KSH\u数组
- 在
和zsh
bash
边缘大小写
bash
和zsh
之间的区别在于,当从源文件d文件调用此函数时,bash
将显示source
,而zsh
将显示源文件的名称。zsh数组索引从1开始。有一个兼容性选项KSH_数组
从0开始。我的编辑${funcstack[1]}
只需要仿真sh
。很抱歉,我无法确定如何将其还原。@TomHale您似乎必须再次编辑,然后单击要还原的版本上的“回滚”。我刚刚做到了,希望不会给你带来任何点球。谢谢,复制品,考虑一下我的答案:
# Print the name of the function calling me
function func_name () {
if [[ -n $BASH_VERSION ]]; then
printf "%s\n" "${FUNCNAME[1]}"
else # zsh
# Use offset:length as array indexing may start at 1 or 0
printf "%s\n" "${funcstack[@]:1:1}"
fi
}