web-dev-qa-db-ja.com

bashとzshの両方で機能する関数の存在をテストしますか?

bashzshの両方で機能するシェル関数が存在するかどうかをテストする方法はありますか?

8
kjo

組み込み/実行可能/キーワード/エイリアスがその名前で使用できるかどうかに関係なく、fooという名前で現在定義されている(または少なくともオートロード用にマークされている)関数があるかどうかを確認する場合は、行う:

if typeset -f foo > /dev/null; then
  echo there is a foo function
fi

ただし、fooと呼ばれるキーワードまたはエイリアスがある場合は、関数よりも優先されます(引用符で囲まれていない場合)。

上記はksh(どこから来たのか)、zshおよびbashで動作するはずです。

14

これは純粋なPOSIXなので、すべてのPOSIXシェルで動作するはずです。

foo()
{
    echo "bar"
}

if type 'foo' 2>/dev/null | grep -q 'function'
then
   echo 'function exists'
fi
1
Sagar