Rob*_*ark 58 bash zsh function definition
如何在zsh中显示函数的定义?type foo不给出定义.
在bash中:
bash$ function foo() { echo hello; }
bash$ foo
hello
bash$ type foo
foo is a function
foo ()
{
echo hello
}
Run Code Online (Sandbox Code Playgroud)
在zsh中:
zsh$ function foo() { echo hello; }
zsh$ foo
hello
zsh$ type foo
foo is a shell function
Run Code Online (Sandbox Code Playgroud)
pb2*_*b2q 72
zsh成语是whence,-f标志打印函数定义:
zsh$ whence -f foo
foo () {
echo hello
}
zsh$
Run Code Online (Sandbox Code Playgroud)
在zsh中,type被定义为等效whence -v,因此您可以继续使用type,但您需要使用-f参数:
zsh$ type -f foo
foo () {
echo hello
}
zsh$
Run Code Online (Sandbox Code Playgroud)
最后,在zsh which中定义为whence -c- 以类似csh的格式打印结果,因此which foo将产生相同的结果.
man zshbuiltins 对于所有这一切.
Tho*_*hor 17
我一直都习惯which这个.
mkl*_*nt0 10
TL;博士
declare -f foo # works in zsh and bash
typeset -f foo # works in zsh, bash, and ksh
Run Code Online (Sandbox Code Playgroud)
type -f/ whence -f/which是在这种情况下不理想的,因为他们的目的是报告用命令的形式优先级最高的是恰巧被定义该名称(除非您还指定-a,在这种情况下,所有的命令形式报道) -而不是专门报告在操作数上作为一个函数.
该-f选项不会改变它 - 它只包含查找中的shell函数.
别名和Shell关键字比壳功能的优先级高,因此,在当前情况下,如果一个别名foo都还规定,type -f foo将报告的别名定义.
请注意,zsh默认情况下会在脚本中扩展别名(同样如此ksh,但不会bash),即使先关闭别名扩展,type -f/ whence -f/ which 仍会先报告别名.
如果你不太确定你在寻找什么,你可以输入
functions
Run Code Online (Sandbox Code Playgroud)
它将显示所有已定义的功能.
请注意,有时会有很多,所以您可能想要管道到寻呼机程序:
functions | less
Run Code Online (Sandbox Code Playgroud)
要取消定义函数,请使用
unfunction functionname
Run Code Online (Sandbox Code Playgroud)