Determine if a function exists in bash目前,我正在做一些从bash执行的单元测试。 单元测试是在bash脚本中初始化,执行和清理的。 该脚本通常包含init(),execute()和cleanup()函数。 但是它们不是强制性的。 我想测试它们是否定义。 之前,我是通过摸索和诱骗来源来做到这一点的,但这似乎是错误的。 有没有更优雅的方法可以做到这一点? 编辑:以下代码段就像一个超级按钮一样工作:
我认为您正在寻找"类型"命令。它会告诉您某些东西是函数,内置函数,外部命令还是只是未定义。例:
如果声明比测试快10倍,这似乎是显而易见的答案。
编辑:在下面,
声明的" -F"选项使它仅返回找到的函数的名称,而不返回整个内容。 使用/ dev / null不应对性能造成任何可衡量的影响,如果它让您担心的那么多:
或将两者结合起来,为自己带来无意义的享受。他们俩都工作。
借用其他解决方案和评论,我想到了这一点:
用作...
它检查给定的参数是否是一个函数,并避免重定向和其他grepping。 疏通旧帖子...但是我最近使用了它,并测试了以下描述的两种替代方法:
这产生了:
声明是helluvalot更快! 测试不同的解决方案:
输出例如:
因此 归结为使用"声明"来检查输出或退出代码。 输出样式:
用法:
但是,如果使用内存,则重定向到null的速度比输出替换的速度要快(可以说,应该废除过时且过时的cmd方法,而应使用$(cmd)。)而且,如果找到find,则声明返回true / false。未找到,并且函数返回函数中最后一个命令的退出代码,因此通常不需要显式返回,并且由于检查错误代码比检查字符串值(甚至是空字符串)要快: 退出状态样式:
您可能会得到尽可能简洁和良性的评价。 从我对另一个答案的评论中(当我回到此页面时,我一直想念它)
更新
我特别喜欢格雷戈里·约瑟夫的解决方案 但是我已经对其进行了一些修改,以克服"双引号丑陋的把戏":
这告诉您它是否存在,但不是它是一个函数
我将其改进为:
并像这样使用它:
可以使用'type'而不使用任何外部命令,但是您必须调用它两次,因此它的运行速度仍然是'declare'版本的两倍:
另外,这在POSIX sh中不起作用,因此,除了琐事之外,它毫无价值! |