![呼び出されたbash関数の名前を取得または反映する方法は? [コピー]](https://linux33.com/image/86690/%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%95%E3%82%8C%E3%81%9Fbash%E9%96%A2%E6%95%B0%E3%81%AE%E5%90%8D%E5%89%8D%E3%82%92%E5%8F%96%E5%BE%97%E3%81%BE%E3%81%9F%E3%81%AF%E5%8F%8D%E6%98%A0%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
まだ解決策が見つかりませんでした。誰にアドバイスがありますか?
私は時々シェルスクリプトでbash関数を書くだけで、デバッグのためではなくスクリプトを冗長に保つのが好きです。そのため、時には、呼び出されたbash関数の「名前」をスクリプトで「変数」として表示したい場合があります。
私がすることは、関数名を含む一般変数を設定することだけです。このように:
test ()
{
funcName=test
echo "function running..."
echo "\$0 is : $0"
echo "function name is : $funcName"
}
しかし、これはちょっと愚かなことです。
もっと良いものがありますか?
答え1
時には読むだけで十分ですman bash
。
機能名
現在実行中の呼び出しスタック内のすべてのシェル関数の名前を含む配列変数。インデックス0の要素は、現在実行中のシェル関数の名前です。一番下の要素(インデックスが最も高い要素)は「main」です。この変数は、シェル関数の実行時にのみ存在します。 FUNC-NAME の割り当てが無効で、エラー状態を返します。 FUNCNAME が設定されていないと、後でリセットしても特殊属性が失われます。
使用例:
#!/usr/bin/env bash
func()
{
echo I am inside "$FUNCNAME"
}
foo()
{
echo I am inside "$FUNCNAME"
}
func
foo