我想知道是否可以在腳本中檢查函數的存在。即此刻,我如果是要檢查的值,然後調用一個函數的幾個,但不知道是否有可能做這樣的事情:shell bash,你可以檢查一個函數是否存在
if[[ ${function_name}Function exists ]]
then
.....call function etc
fi
那裏可能是腳本中的一個函數
這可能嗎?
我想知道是否可以在腳本中檢查函數的存在。即此刻,我如果是要檢查的值,然後調用一個函數的幾個,但不知道是否有可能做這樣的事情:shell bash,你可以檢查一個函數是否存在
if[[ ${function_name}Function exists ]]
then
.....call function etc
fi
那裏可能是腳本中的一個函數
這可能嗎?
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
。 (感謝那個人)
declare -F
顯示你在Bash中聲明的所有函數。從那裏,它是我發現了一個簡單的declare -F my_function && echo 'function exists'
最可靠的方法是
FuncName='MyFunction'
if typeset -f "${FuncName}" > /dev/null; then
"${FuncName}"
fi
順便說一句,這種方法在zsh
正常工作了。
+1。更簡潔的說,將這個建議合併到一個單獨的測試中:'if [[$(type -t $ funcname 2>/dev/null)== function]];然後回顯「我是一個功能」; fi' –
'declare -F function>/dev/null' –
「在bash中沒有這樣的操作來檢查函數是否存在」 - 是的。請參閱'幫助申報'。 – l0b0