スクリプトから呼び出された関数名を解決する方法

スクリプトから呼び出された関数名を解決する方法

つまり、次のことを行います。

-bash$ function tt
{
 echo $0;
}

-bash$ tt

$0が返されます-bash。しかし、呼び出された関数名(ttこの場合は関数名)はどうすればわかりますか?

答え1

bash使用中機能名バルク:

tt() {
  printf '%s\n' "$FUNCNAME"
}

いくつかのksh実装では、次のようになります。

tt() { printf '%s\n' "$0"; }

存在するksh93

tt() { printf '%s\n' "${.sh.fun}"; }

上記の関数の内部ksh93dを使用して関数名を取得することもできますが、関数を定義するにはフォームを使用する必要があり$0ます。function name { ...; }


では配列をzsh使用できますfuncstack

tt() { print -rl -- $funcstack[1]; }

または$0内部機能。


存在するfish

function tt
  printf '%s\n' "$_"
end

答え2

bashでは${FUNCNAME[0]}

答え3

function tt { echo ${FUNCNAME}; }

私のCentOS 6コンピュータでこれを実行します。

関連情報