シェルスクリプトで関数を実行する前に、関数が存在するかどうかを確認したい。
スクリプトシェルはそれをサポートしていますか? そしてそれを行う方法は?
このコメントで読んだように、これは次のようになります。
type -t function_name
function
これは、関数の場合に返されます。
$ type -t f_test
$
$ f_test () { echo "hello"; }
$ type -t f_test
function
type
良い情報を提供することに注意してください:
$ type -t ls
alias
$ type -t echo
builtin
type
POSIX はビルトインの引数を指定せず、その出力を未指定のままにします。シェル固有のソリューションを除いて、おそらく最善の策は
if type foo | grep -i function > /dev/null; then
# foo is a function
fi
いつでも関数を実行してみることができます。存在しない場合、コマンドの終了ステータスは 127 になります。
$ myfunction arg1 arg2 || {
> if [ $? -ne 127 ]; then
> echo Error with my function
> else
> echo myfunction undefined
> fi; }
もちろん、関数は別のバイナリと同じ名前を持っている可能性があり、関数によってシャドウされていない場合、そのプログラムを実行したくない場合があります。