我想在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...
}
答案 0 :(得分:1)
(从函数内部)获取函数名称的最简单方法取决于所使用的shell:
someFunctionName() {
echo $funcstack[1]
}
someFunctionName() {
echo ${FUNCNAME[0]}
}
someFunctionName() {
currentShell=$(ps -p $$ | awk "NR==2" | awk '{ print $4 }' | tr -d '-')
if [[ $currentShell == 'bash' ]]; then
echo ${FUNCNAME[0]}
elif [[ $currentShell == 'zsh' ]]; then
echo $funcstack[1]
fi
}
答案 1 :(得分:0)
KSH_ARRAYS
)还是1(默认)开始索引zsh
和bash
中工作# 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
}
边缘保护套
bash
和zsh
之间的区别在于,当从source
d文件中调用此函数时,bash
会显示source
,而{{1} }会说出源文件的名称。