Bash

測試可以在 bash 和 zsh 上執行的函式的存在嗎?

  • October 28, 2017

有沒有辦法測試是否存在適用於bash和的 shell 函式zsh

如果您想檢查該名稱是否存在目前定義的(或至少可能標記為自動載入)函式,foo無論該名稱是否也可以使用內置/執行檔/關鍵字/別名,您可以執行以下操作:

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

儘管請注意,如果還呼叫了關鍵字或別名foo,則它將優先於函式(未引用時)。

以上應該適用於ksh(它來自哪裡),zsh並且bash.

這是純 POSIX,因此它應該適用於所有 POSIX shell。

foo()
{
   echo "bar"
}

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

引用自:https://unix.stackexchange.com/questions/332005