Zshで関数の定義を表示するにはどうすればよいですか? type foo
は定義を与えません。
バッシュで:
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イディオムはwhence
であり、-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
のすべて。
私はいつもこれにwhich
を使用しました。
tl; dr
declare -f foo # works in zsh and bash
typeset -f foo # works in zsh, bash, and ksh
type -f
/whence -f
/which
はこの場合は準最適です。これは、その目的は、highestでコマンドフォームを報告することです) precedencethathappens to be defined byby the name(ただし、-a
、その場合allコマンド形式が報告されます)-オペランドをとして具体的に報告するのではなく関数。
-f
オプションはそれを変更しません-それはincludesルックアップのシェル関数のみです。
エイリアスとシェルキーワードはシェル関数よりも優先順位が高いため、当面のケースでは、エイリアスfoo
がも定義されている場合、 type -f foo
はalias定義を報告します。
zsh
はデフォルトでスクリプトのエイリアスを展開します(ksh
は展開しますが、bash
は展開しません)。また、最初にエイリアス展開をオフにした場合でも、type -f
/whence -f
/which
still最初にエイリアスを報告します。
探しているものがよくわからない場合は、
functions
定義されたすべての関数が表示されます。
それらの多くが時々あるので、ページャープログラムにパイプしたいかもしれないことに注意してください:
functions | less
関数を未定義にするには、次を使用します
unfunction functionname