如何显示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
报告别名。