首页 / 知识
确定bash中是否存在函数
2023-04-16 17:55:00

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中不起作用,因此,除了琐事之外,它毫无价值! |
最新内容
相关内容
linux执行多次命令?
linux执行多次命令?,系统,信息,标准,工作,情况,命令,周期性,服务,代码,时间,linux系统能把很多命令一起执行,然后结果输出一个文件吗?就是scrilinux并行化执行命令?
linux并行化执行命令?,系统,工具,信息,命令,名称,网络,管理,首页,服务,暂停,Linux多台主机批量执行命令1、执行命令(记得先对doCommand.s h增加如何执行linux命令?
如何执行linux命令?,单位,系统,网络,信息,权威,命令,文件,音乐,目录,选项,mv什么意思呢?1、MV就是音乐短片(Music Video),是指与音乐(通常大部分是linux运行脚本命令?
linux运行脚本命令?,系统,代码,服务,文件,工具,平台,网站,脚本,命令,方法,Linux配置开机自启动执行脚本有哪些方法方法1:执行ntsysv命令,然后在linux打断执行的命令?
linux打断执行的命令?,系统,状态,网站,标准,通用,客服,人员,名字,网络,暂停,Linux停止命令继续执行的方法是什么它只是在进程中维持挂起的状态linux脚本命令修改?
linux脚本命令修改?,密码,系统,文件,资料,工具,软件,基础,地址,标准,命令,linux中想在脚本中实现修改一个ip地址参数的配置文件,用sed命令如何linux命令没执行完?
linux命令没执行完?,系统,设备,工具,情况,密码,状态,电脑,管理,材料,服务,Linux:写的脚本执行过程中为什么会有cp未复制完,或者tar未解压完的linux系统初始化命令?
linux系统初始化命令?,系统,基础,工作,服务,信息,命令,软件,网络,密码,发行,linux文件系统怎样初始化步骤1、(1)init 过程执行的第一个脚本是linux脚本命令教学?
linux脚本命令教学?,标准,数据,系统,脚本,代码,流程,官网,底部,命令,变量,linux怎么运行脚本1、首先要下载Ubuntu系统,在百度搜索Ubuntu,打开Ubushell中执行linux命令?
shell中执行linux命令?,系统,名称,环境,管理,工作,代码,技术,软件,经理,基础,it运维需要学什么?1、单纯学编程语言本身,对于一些英文符号,需要记linux命令注释脚本?
linux命令注释脚本?,代码,工具,名称,工作,脚本,发行,服务,环境,数据,基础,linuxshell编程方法1:sed -i s/被替换的内容/要替换成的内容/ filelinux打印命令执行?
linux打印命令执行?,信息,系统,工具,服务,命令,发行,基础,位置,设备,时间,怎么使用CMD里面的print命令?1、print 打印命令用法:PRINT [/D:device