2014-01-20 78 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正常工作了。

相关问题