tl;博士
declare -f foo # works in zsh and bash
typeset -f foo # works in zsh, bash, and ksh
如果您不介意或不喜欢在输出中包含给定名称存在的所有命令形式:谢谢,Raine Revere。
type -af # zsh only (works differently in bash and ksh)
type -f
//在这种情况下是次优的whence -f
,which
因为它们的目的是报告恰好由该名称定义的具有最高优先级的命令形式-而不是专门将操作数作为函数报告。
也就是说,实际上这意味着只有同名的别名优先(技术上也是一个shell 关键字,尽管为 shell 关键字命名函数可能是个坏主意)。
请注意,zsh
默认情况下会在脚本中扩展别名(如ksh
,但不是bash
),即使您先关闭别名扩展,//type -f
仍会首先报告别名。whence -f
which
在zsh
中,该-f
选项仅在 中的查找中包含shell 函数zsh
,因此 - 除非-a
也用于列出所有命令形式 - 给定名称的别名将作为唯一输出打印。
在bash
andksh
中,type -f
实际上从查找中排除了函数;whence
中不存在bash
,并且ksh
其中不打印函数定义;which
不是内置的ksh
and bash
,根据定义,外部实用程序不能打印 shell 函数。