有没有办法测试是否存在既适用于bash
又适用于 的 shell 函数zsh
?
答案1
如果您想检查名称是否存在当前定义的(或至少可能标记为自动加载)函数,foo
无论内置/可执行文件/关键字/别名是否也可按该名称使用,您可以执行以下操作:
if typeset -f foo > /dev/null; then
echo there is a foo function
fi
但请注意,如果还调用了关键字或别名foo
,则它将优先于函数(未引用时)。
上面的内容应该在ksh
(它来自哪里)zsh
和中工作bash
。
答案2
这是纯 POSIX,因此它应该适用于所有 POSIX shell。
foo()
{
echo "bar"
}
if type 'foo' 2>/dev/null | grep -q 'function'
then
echo 'function exists'
fi