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