shell bash,你能检查一个函数是否存在

时间:2014-01-20 18:32:27

标签: string bash function shell grep

我想知道是否可以检查脚本中是否存在函数。即此刻,我有几个if来检查一个值,然后调用一个函数,但是想知道是否有可能做类似的事情:

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

脚本中可能有一个函数

这可能吗?

3 个答案:

答案 0 :(得分: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。 (感谢那个人)

答案 1 :(得分:1)

declare -F显示在Bash中声明的所有函数。从那里它是一个简单的declare -F my_function && echo 'function exists'

答案 2 :(得分:0)

我找到的最可靠的方法是

FuncName='MyFunction'
if typeset -f "${FuncName}" > /dev/null; then
  "${FuncName}"
fi
顺便说一句,这种方法在zsh也可以正常工作。