Hel*_*hne 3 shell posix function sh
这基本上与确定 bash 中是否存在函数相同,只是这次它不是针对 Bash,而是针对POSIX shell:
如何判断给定名称的shell函数是否存在?
似乎没有一个典型的内置函数type是 POSIX 强制要求的,所以这个问题更加困难,甚至可能是不可能的。
POSIX(更准确地说是X/Open 可移植性指南)指定类型命令。它没有说明type命令应该返回什么来告诉参数是什么。然而,该标准表示它通常标识操作数,因此type当传递函数名称时,实现在其回复中不太可能不包含字符串“function”。
这应该适用于大多数(如果不是全部)符合 POSIX 的 shell:
isFunction()
{
type "$1" | sed "s/$1//" | grep -qwi function
}
Run Code Online (Sandbox Code Playgroud)
您也可以command -V代替type此处运行,并对未指定的输出格式使用相同的注释。我从来不这样做,因为前者打字更短,更容易记住。然而,如果您运行的 shell 决定不包含 XSI(可能posh),即,该 shell 通过限制它试图遵守严格的 POSIX 集的实用程序,从而破坏了许多现有脚本的可移植性,那么这将是强制性的。