5

シェルスクリプトで関数を実行する前に、関数が存在するかどうかを確認したい。

スクリプトシェルはそれをサポートしていますか? そしてそれを行う方法は?

4

3 に答える 3

7

このコメントで読んだように、これは次のようになります。

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
于 2013-07-31T13:44:38.990 に答える
2

typePOSIX はビルトインの引数を指定せず、その出力を未指定のままにします。シェル固有のソリューションを除いて、おそらく最善の策は

if type foo | grep -i function > /dev/null; then
   # foo is a function
fi
于 2013-07-31T19:40:26.090 に答える
0

いつでも関数を実行してみることができます。存在しない場合、コマンドの終了ステータスは 127 になります。

$ myfunction arg1 arg2 || {
>  if [ $? -ne 127 ]; then
>    echo Error with my function
>  else
>    echo myfunction undefined
>  fi; }

もちろん、関数は別のバイナリと同じ名前を持っている可能性があり、関数によってシャドウされていない場合、そのプログラムを実行したくない場合があります。

于 2013-07-31T19:09:27.250 に答える