bashとzshで動作する機能があるかどうかをテストしますか?

bashとzshで動作する機能があるかどうかをテストしますか?

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

関連情報