测试是否存在可以在 bash 和 zsh 上运行的函数?

测试是否存在可以在 bash 和 zsh 上运行的函数?

有没有办法测试是否存在既适用于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

相关内容