Wie zeige ich die Definition einer Funktion in zsh? type foo
gibt die Definition nicht an.
In Bash:
bash$ function foo() { echo hello; }
bash$ foo
hello
bash$ type foo
foo is a function
foo ()
{
echo hello
}
In zsh:
zsh$ function foo() { echo hello; }
zsh$ foo
hello
zsh$ type foo
foo is a shell function
bash
function
zsh
definition
Rob Bednark
quelle
quelle
declare -f foo
ist die bessere Wahl auch in Bash - und es funktioniert auch inzsh
; siehe meine Antwort für Hintergrundinformationen.Antworten:
Die zsh-Redewendung lautet
whence
: Das-f
Flag druckt Funktionsdefinitionen:zsh$ whence -f foo foo () { echo hello } zsh$
In zsh
type
wird als äquivalent zu definiertwhence -v
, sodass Sie weiterhin verwenden könnentype
, aber Sie müssen das folgende-f
Argument verwenden:zsh$ type -f foo foo () { echo hello } zsh$
Und schließlich ist in zsh
which
definiert als äquivalent zuwhence -c
- Druckergebnisse im csh-ähnlichen Format, sodasswhich foo
dieselben Ergebnisse erzielt werden.man zshbuiltins
für all das.quelle
-f
wird in der Antwort verwendet, die Funktionsdefinitionen druckttype -f foo
tut dies auch;type
ist äquivalent zuwhence -v
.Ich habe immer nur dafür verwendet
which
.quelle
which
meldet die höchsten Vorrang Form des Befehls).tl; dr
declare -f foo # works in zsh and bash typeset -f foo # works in zsh, bash, and ksh
type -f
/whence -f
/which
Sind in diesem Fall nicht optimal , weil ihr Zweck die Befehlsform mit dem berichten , ist höchste Priorität , die definiert wird , geschieht mit diesem Namen (es sei denn , Sie auch angeben-a
, in welchem Fall alle Befehlsformen gemeldet werden) - als spezifisch gegen Berichterstattung auf dem Operanden als Funktion .Die
-f
Option wird das nicht ändern - es ist nur beinhaltet Shell - Funktionen in dem Look - up.Aliase und Shell - Schlüsselwörter haben höhere Priorität als Shell - Funktionen, so im Fall bei der Hand, wenn ein Alias
foo
wurde auch definiert,type -f foo
würden die Bericht Alias - Definition.Beachten Sie, dass
zsh
Aliase in Skripts standardmäßig nicht erweitern (wie auchksh
, aber nichtbash
), und selbst wenn Sie Alias Erweiterung zuerst ab drehen,type -f
/whence -f
/which
noch Aliase berichtet zuerst.quelle
Wenn Sie nicht ganz sicher sind, wonach Sie suchen, können Sie einfach tippen
functions
und es zeigt Ihnen alle definierten Funktionen.
Beachten Sie, dass es manchmal VIELE davon gibt, sodass Sie möglicherweise zu einem Pager-Programm weiterleiten möchten:
functions | less
Verwenden Sie zum Aufheben der Definition einer Funktion
unfunction functionname
quelle
functions
diestypeset -f
(mit Ausnahme der-M
Option) äquivalent ist , sodass Sie sogar den grammatikalisch leicht kontraintuitiven Befehl verwenden könnenfunctions foo
, um Informationen zu einer bestimmten Funktion abzurufen.