bash
とzsh
の両方で機能するシェル関数が存在するかどうかをテストする方法はありますか?
組み込み/実行可能/キーワード/エイリアスがその名前で使用できるかどうかに関係なく、foo
という名前で現在定義されている(または少なくともオートロード用にマークされている)関数があるかどうかを確認する場合は、行う:
if typeset -f foo > /dev/null; then
echo there is a foo function
fi
ただし、foo
と呼ばれるキーワードまたはエイリアスがある場合は、関数よりも優先されます(引用符で囲まれていない場合)。
上記はksh
(どこから来たのか)、zsh
およびbash
で動作するはずです。
これは純粋なPOSIXなので、すべてのPOSIXシェルで動作するはずです。
foo()
{
echo "bar"
}
if type 'foo' 2>/dev/null | grep -q 'function'
then
echo 'function exists'
fi