5

我想在 shell 脚本中执行一个函数之前检查它是否存在。

脚本外壳支持吗?怎么做?

4

3 回答 3

7

正如在此评论中所读,这应该是:

type -t function_name

function如果它是一个函数,则返回。

测试

$ type -t f_test
$ 
$ f_test () { echo "hello"; }
$ type -t f_test
function

请注意,它type提供了很好的信息:

$ type -t ls
alias
$ type -t echo
builtin
于 2013-07-31T13:44:38.990 回答
2

POSIX 没有为type内置函数指定任何参数,并且未指定其输出。除了特定于 shell 的解决方案之外,您最好的选择可能是

if type foo | grep -i function > /dev/null; then
   # foo is a function
fi
于 2013-07-31T19:40:26.090 回答
0

您总是可以尝试执行该功能。如果不存在,该命令的退出状态将为 127:

$ myfunction arg1 arg2 || {
>  if [ $? -ne 127 ]; then
>    echo Error with my function
>  else
>    echo myfunction undefined
>  fi; }

当然,该函数可能与另一个二进制文件具有相同的名称,并且如果该程序没有被该函数隐藏,您可能不想运行该程序。

于 2013-07-31T19:09:27.250 回答