如何显示zsh函数定义(如bash“type myfunc”)?

如何在zsh中显示函数的定义? type foo不给定义。

在bash中:

 bash$ function foo() { echo hello; } bash$ foo hello bash$ type foo foo is a function foo () { echo hello } 

在zsh:

 zsh$ function foo() { echo hello; } zsh$ foo hello zsh$ type foo foo is a shell function 

zsh的习惯用法是, -f标志打印函数定义:

 zsh$ whence -f foo foo () { echo hello } zsh$ 

在zsh中, type被定义为等同于whence -v ,所以你可以继续使用type ,但是你需要使用-f参数:

 zsh$ type -f foo foo () { echo hello } zsh$ 

最后,在被定义为相等的zsh中which whence -c – 以csh-like格式打印结果,这样which foo将产生相同的结果。

man zshbuiltins所有这一切。

我一直只用这个。

如果你不确定你在找什么,你可以input

 functions 

它会显示所有已定义的function。

请注意,有时候会有很多这样的情况,所以您可能想要传送到寻呼机程序:

 functions | less 

取消定义一个函数,使用

 unfunction functionname 

TL;博士

 declare -f foo # works in zsh and bash typeset -f foo # works in zsh, bash, and ksh 

在这种情况下type -f / whence -f /是不理想的 ,因为它们的目的是报告具有最高优先级的命令表单 (除非你还指定-a ,在这种情况下所有的命令forms被报告) – 而不是专门报告操作数作为一个函数

-f选项不会改变它 – 它只在查找中包含 shell函数。

别名和shell关键字的优先级高于shell函数,所以,在这种情况下,如果定义了别名foo ,则type -f foo将报告别名定义。

请注意, zsh在默认情况下会在脚本中扩展别名(就像ksh ,而不是bash ),即使您先closures别名扩展,也可以先type -f / whence -f / which报告别名。