2014-01-20 114 views
3

我想知道是否可以在腳本中檢查函數的存在。即此刻,我如果是要檢查的值,然後調用一個函數的幾個,但不知道是否有可能做這樣的事情:shell bash,你可以檢查一個函數是否存在

if[[ ${function_name}Function exists ]] 
then 
.....call function etc 
fi 

那裏可能是腳本中的一個函數

這可能嗎?

回答

6
if type Function &>/dev/null 
then 
    ... 
fi 

例子:

$ type f 2>& /dev/null && echo f exists || echo f does not exist 
f does not exist 
$ f() 
> { 
> echo 1 
> } 
$ type f >& /dev/null && echo f exists || echo f does not exist 
f exists 

什麼我在這裏?

  • 這裏我首先檢查函數f是否存在;它不存在,好吧。
  • 然後我創建它。
  • 然後我再檢查一下,如果存在。它存在,好的。

沒有額外的檢查,你不能直接說,如果它是一個命令,或別名,或功能;所有你知道的,如果這個實體存在或不存在。

如果你想運行的功能,只有功能,你必須讓你的檢查更爲嚴格:

type Function | grep -q '^function$' 2>/dev/null 

在bash,你也可以使用declare -F function。 (感謝那個人)

+2

+1。更簡潔的說,將這個建議合併到一個單獨的測試中:'if [[$(type -t $ funcname 2>/dev/null)== function]];然後回顯「我是一個功能」; fi' –

+1

'declare -F function>/dev/null' –

+0

「在bash中沒有這樣的操作來檢查函數是否存在」 - 是的。請參閱'幫助申報'。 – l0b0

0

declare -F顯示你在Bash中聲明的所有函數。從那裏,它是我發現了一個簡單的declare -F my_function && echo 'function exists'

0

最可靠的方法是

FuncName='MyFunction' 
if typeset -f "${FuncName}" > /dev/null; then 
    "${FuncName}" 
fi 

順便說一句,這種方法在zsh正常工作了。

相關問題