GoGPT Best VPN GoSearch

OnWorks-Favicon

zshmisc - Online in der Cloud

Führen Sie zshmisc im kostenlosen Hosting-Anbieter OnWorks über Ubuntu Online, Fedora Online, Windows Online-Emulator oder MAC OS Online-Emulator aus

Dies ist der Befehl zshmisc, der im kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, Windows Online-Emulator oder MAC OS Online-Emulator ausgeführt werden kann.

PROGRAMM:

NAME/FUNKTION


zshmisc - alles und noch mehr

Schlicht BEFEHLE & PIPELINES


A einfach Befehl ist eine Folge optionaler Parameterzuweisungen, gefolgt von
durch Leerzeichen getrennte Wörter, mit optionalen Weiterleitungen dazwischen. Für eine Beschreibung von
Aufgabe, siehe Anfang von zshparam(1).

Das erste Wort ist der auszuführende Befehl, die restlichen Wörter, falls vorhanden, sind
Argumente für den Befehl. Wenn ein Befehlsname angegeben wird, ändern die Parameterzuweisungen
die Umgebung des Befehls, wenn er ausgeführt wird. Der Wert eines einfachen Befehls ist seine
Exit-Status oder 128 plus Signalnummer, wenn durch ein Signal beendet. Beispiel:

Echo foo

ist ein einfacher Befehl mit Argumenten.

A Pipeline ist entweder ein einfacher Befehl oder eine Folge von zwei oder mehr einfachen Befehlen, wobei
Jeder Befehl ist vom nächsten durch ` getrennt|' oder `|&'. Wo Befehle durch
`|', wird die Standardausgabe des ersten Befehls mit der Standardeingabe des
nächste. `|&' ist die Abkürzung für `2> & 1 |', das sowohl den Standardausgang als auch den
Standardfehler des Befehls an die Standardeingabe des nächsten. Der Wert einer Pipeline
ist der Wert des letzten Befehls, es sei denn, der Pipeline geht ` voran.!' in diesem Fall die
Der Wert ist die logische Umkehrung des Wertes des letzten Befehls. Beispiel:

Echo foo | Durst 's/foo/bar/'

ist eine Pipeline, bei der die Ausgabe (`foo' plus eine neue Zeile) des ersten Befehls wird übergeben
zum Eingang des zweiten.

Wenn einer Pipeline ` vorangestellt istkoprok', wird es als Coprozess ausgeführt; eine Zweiwege-Pipe ist
zwischen ihr und der übergeordneten Shell hergestellt. Die Shell kann von der
Coprozess mittels `>&p' und `<&p' Umleitungsoperatoren oder mit `drucken -p' und
`besuch -p'. Einer Pipeline können nicht beide vorangehen `koprok' und `!'. Wenn die Job-Kontrolle
aktiv ist, kann der Koprozess in anderer Hinsicht als Eingabe und Ausgabe als gewöhnlicher
Hintergrundjob.

A Unterliste ist entweder eine einzelne Pipeline oder eine Folge von zwei oder mehr Pipelines, getrennt durch
`&&' oder `||'. Wenn zwei Pipelines durch ` getrennt sind&&', die zweite Pipeline wird ausgeführt
nur wenn die erste erfolgreich ist (gibt einen Nullstatus zurück). Wenn zwei Pipelines durch
`||', wird die zweite nur ausgeführt, wenn die erste fehlschlägt (gibt einen Status ungleich Null zurück). Beide
Operatoren haben gleiche Priorität und sind linksassoziativ. Der Wert der Unterliste ist der
Wert der zuletzt ausgeführten Pipeline. Beispiel:

dmesg | grep Panik && drucken ja

ist eine Unterliste, die aus zwei Pipelines besteht, die zweite nur ein einfacher Befehl, der
ausgeführt, wenn und nur wenn grep Befehl gibt einen Nullstatus zurück. Wenn nicht, wird der Wert
der Unterliste ist dieser Rückgabestatus, andernfalls ist es der von der drucken (schon fast
sicherlich Null).

A Liste ist eine Folge von null oder mehr Unterlisten, in der jede Unterliste durch ` abgeschlossen wird;',
`&', `&|', `&!' oder ein Zeilenumbruch. Dieser Abschluss kann optional im letzten
Unterliste in der Liste, wenn die Liste als komplexer Befehl innerhalb von ` erscheint(...)' oder `{...}'.
Wenn eine Unterliste durch ` beendet wird;' oder Newline, die Shell wartet, bis es fertig ist, bevor
die nächste Unterliste auszuführen. Wenn eine Unterliste durch ein `&', `&|', oder `&!', die Schale
führt die letzte Pipeline im Hintergrund aus und wartet nicht, bis sie beendet ist
(Beachten Sie den Unterschied zu anderen Shells, die die gesamte Unterliste im Hintergrund ausführen).
Eine im Hintergrund laufende Pipeline gibt den Status Null zurück.

Allgemeiner kann eine Liste als eine Reihe beliebiger Shell-Befehle betrachtet werden, einschließlich
die komplexen Befehle unten; dies ist impliziert, wo immer das Wort `list' in späteren
Beschreibungen. Beispielsweise bilden die Befehle in einer Shell-Funktion eine spezielle Art von Liste.

VORBEFEHL MODIFIKATOREN


Einem einfachen Befehl kann ein Vorbefehl Modifikator, was die Art und Weise verändern wird, wie die
Befehl wird interpretiert. Diese Modifikatoren sind in der Shell integrierte Befehle mit Ausnahme von
nicht korrekt das ist ein reserviertes Wort.

- Der Befehl wird mit einem ` ausgeführt-' vorangestellt argv [0] String.

builtin
Das Befehlswort wird als Name eines eingebauten Befehls angesehen und nicht als Name einer Shell
Funktion oder externer Befehl.

Befehl [ -pvV ]
Das Befehlswort wird als Name eines externen Befehls angesehen und nicht als
Shell-Funktion oder Builtin. Wenn die POSIX_BUILTINS Option gesetzt ist, werden Builtins
können zwar auch ausgeführt werden, bestimmte spezielle Eigenschaften werden jedoch unterdrückt. -p Flagge
bewirkt, dass statt dessen ein Standardpfad durchsucht wird $ path. Mit dem -v Flagge,
Befehl ähnelt woher und mit -V, es ist äquivalent zu woher -v.

exec [ -Kl ] [ -a argv0 ]
Der folgende Befehl wird zusammen mit allen Argumenten anstelle des aktuellen ausgeführt
Prozess und nicht als Unterprozess. Die Shell verzweigt sich nicht und wird ersetzt.
Die Shell ruft nicht auf TRAPEXITnoch ist es Quelle zlogout Dateien. Die Optionen
werden zur Kompatibilität mit anderen Shells bereitgestellt.

Die -c Option löscht die Umgebung.

Die -l Option ist äquivalent zu der - Precommand-Modifikator, um den Ersatz zu behandeln
Befehl als Login-Shell; der Befehl wird mit einem - vorangestellt argv [0]
Zeichenfolge. Dieses Flag hat keine Wirkung, wenn es zusammen mit dem -a .

Die -a Mit dieser Option können Sie explizit angeben, argv [0] Zeichenfolge (der Name des
Befehl aus Sicht des Prozesses selbst), der vom Ersatzbefehl verwendet werden soll und
direkt gleichbedeutend mit der Einstellung eines Wertes für die ARGV0 variable Umgebung

nicht korrekt
Die Rechtschreibkorrektur wird bei keinem der Wörter durchgeführt. Dies muss vor jedem
anderen Precommand-Modifikator, da dieser unmittelbar vor der Analyse interpretiert wird
erledigt. In nicht interaktiven Shells hat es keine Auswirkungen.

noglob Für keines der Wörter wird eine Dateinamengenerierung (Globbing) durchgeführt.

KOMPLEX BEFEHLE


A Komplex Befehl in zsh ist eines der folgenden:

if Liste dann Liste [ elif Liste dann Liste ] ... [ sonst Liste ] fi
Die if Liste ausgeführt wird und wenn der Exit-Status Null zurückgibt, dann Liste is
ausgeführt. Andernfalls wird elif Liste ausgeführt wird und wenn sein Status Null ist, dann
Liste ausgeführt wird. Wenn jeder elif Liste gibt einen Status ungleich Null zurück, sonst Liste is
hingerichtet.

für Name ... [ in Wort ... ] Begriff do Liste erledigt
woher Begriff ist mindestens ein Zeilenumbruch oder ;Erweitern Sie die Liste der Worts, und legen Sie die
Parameter Name an jeden von ihnen der Reihe nach, Liste jedes Mal. Wenn die in Wort
weggelassen wird, verwenden Sie die Positionsparameter anstelle der Worts.

Mehr als ein Parameter Name kann vor der Liste der Worts. Wenn N Names sind
gegeben, dann bei jeder Ausführung der Schleife die nächste N Worts werden zugeordnet dem
entsprechenden Parameter. Wenn mehr Names als verbleibende Worts, die
Die restlichen Parameter werden jeweils auf den leeren String gesetzt. Die Ausführung der Schleife endet
wenn nichts mehr übrig ist Wort dem ersten zuordnen Name. Es ist nur möglich
für in als erster erscheinen Name in der Liste, sonst wird es als Markierung behandelt
das Ende der Liste.

für (( [Ausdruck1] ; [Ausdruck2] ; [Ausdruck3] )) do Liste erledigt
Der arithmetische Ausdruck Ausdruck1 wird zuerst ausgewertet (siehe Abschnitt `Arithmetik
Auswertung'). Der arithmetische Ausdruck Ausdruck2 wird wiederholt ausgewertet, bis
wird zu Null ausgewertet und wenn ungleich Null, Liste ausgeführt wird und der arithmetische Ausdruck
Ausdruck3 ausgewertet. Wenn ein Ausdruck weggelassen wird, verhält er sich, als ob er ausgewertet worden wäre
um 1.

während Liste do Liste erledigt
Führen Sie die aus do Liste solange die während Liste gibt einen Exit-Status von Null zurück.

bis Liste do Liste erledigt
Führen Sie die aus do Liste solange bis Liste gibt einen Exit-Status ungleich Null zurück.

wiederholen Wort do Liste erledigt
Wort wird erweitert und als arithmetischer Ausdruck behandelt, der zu einem
Anzahl n. Liste wird dann ausgeführt n Zeiten.

Die wiederholen Syntax ist standardmäßig deaktiviert, wenn die Shell in einem Modus startet, der emuliert
eine andere Shell. Es kann mit dem Befehl ` aktiviert werdenermöglichen -r wiederholen'

Häuser Wort in [[(] Anleitungen [ | Anleitungen ] ... ... ) Liste (;;|;&|;|) ] ... esac
Führen Sie die aus Liste mit dem ersten verbunden Anleitungen das stimmt überein Wort, falls vorhanden. Die
Die Form der Muster ist die gleiche wie die für die Generierung von Dateinamen. Siehe die
Abschnitt „Dateinamengenerierung“.

Beachten Sie außerdem, dass, sofern nicht die SH_GLOB Option gesetzt ist, wird das gesamte Muster mit
Alternativen werden von der Shell als Äquivalent zu einer Gruppe von Mustern innerhalb behandelt
Klammern, obwohl um die Klammern und die vertikalen
Balken und wird an diesen Stellen aus dem Muster entfernt. Leerzeichen können auftreten
an anderer Stelle im Muster; dies wird nicht entfernt. Wenn die SH_GLOB Option ist gesetzt, also
dass eine öffnende Klammer eindeutig als Teil des Falles behandelt werden kann
Syntax wird der Ausdruck in einzelne Wörter zerlegt und diese werden als
strenge Alternativen (wie in anderen Shells).

Besitzt das Liste die ausgeführt wird, wird beendet mit ;& statt ;;, folgende
Liste wird ebenfalls ausgeführt. Die Regel für den Terminator der folgenden Liste ;;, ;& or
;| wird angewendet, es sei denn, die esac ist erreicht.

Besitzt das Liste die ausgeführt wird, wird beendet mit ;| Die Shell scannt weiterhin die
Anleitungens sucht nach der nächsten Übereinstimmung und führt die entsprechende Listeund bewerben
die Regel für den entsprechenden Terminator ;;, ;& or ;|. Beachten Sie, dass Wort ist nicht
erneut erweitert; alle anwendbaren Anleitungens werden mit dem gleichen Wort.

wählen Name [ in Wort ... Begriff ] do Liste erledigt
woher Begriff ist ein oder mehrere Zeilenumbrüche oder ; das beenden Worts. Drucken Sie den Satz von
Worts, denen jeweils eine Zahl vorangestellt ist. Wenn die in Wort weggelassen wird, verwenden Sie die Positions
Parameter. Das PROMPT3 Eingabeaufforderung wird gedruckt und eine Zeile aus dem Zeileneditor gelesen
wenn die Shell interaktiv ist und diese aktiv ist, oder die Standardeingabe. Wenn dies
Zeile besteht aus der Nummer eines der aufgeführten Worts, dann der Parameter Name is
auf einstellen Wort entsprechend dieser Nummer. Ist diese Zeile leer, wird die Auswahl
Liste wird erneut gedruckt. Andernfalls wird der Wert des Parameters Name ist auf Null gesetzt.
Der Inhalt der aus der Standardeingabe gelesenen Zeile wird im Parameter gespeichert ANTWORTEN.
Liste wird für jede Auswahl ausgeführt, bis ein Umbruch oder das Dateiende erreicht wird.

( Liste )
Ausführen Liste in einer Unterschale. Fallen, die von der Falle eingebauten werden auf ihre
Standardwerte während der Ausführung Liste.

{ Liste }
Ausführen Liste.

{ Versuchsliste } immer { Immerliste }
Erst ausführen Versuchsliste. Unabhängig von Fehlern oder brechen, fortsetzen oder Rückkehr
Befehle innerhalb Versuchsliste, ausführen Immerliste. Ausführung dann
setzt sich aus dem Ergebnis der Ausführung von Versuchsliste; mit anderen Worten, jeder Fehler,
or brechen, fortsetzen oder Rückkehr Der Befehl wird wie gewohnt behandelt, als ob
Immerliste waren nicht vorhanden. Die beiden Codeblöcke werden als `try
Block‘ und der ‚Immer-Block‘.

Optionale Zeilenumbrüche oder Semikolons können nach dem immer; beachten Sie jedoch, dass
Sie können nicht erscheinen zwischen der vorhergehenden schließenden Klammer und dem immer.

Ein „Fehler“ ist in diesem Zusammenhang ein Zustand wie beispielsweise ein Syntaxfehler, der dazu führt, dass
Shell, um die Ausführung der aktuellen Funktion, des Skripts oder der Liste abzubrechen. Syntaxfehler
während die Shell den Code analysiert, führen nicht dazu, dass Immerliste sein
ausgeführt. Beispielsweise kann ein fehlerhaft erstelltes if blockieren Versuchsliste würde dazu führen
die Shell während des Parsens abzubrechen, so dass Immerliste nicht ausgeführt werden würde, während
eine fehlerhafte Substitution wie ${*foo*} würde einen Laufzeitfehler verursachen, nachdem
welche Immerliste hingerichtet werden würde.

Ein Fehlerzustand kann mit der speziellen Integer-Variable getestet und zurückgesetzt werden
TRY_BLOCK_ERRORAußerhalb einer Immerliste der Wert ist irrelevant, aber es ist
initialisiert auf -1. Innerhalb Immerliste, der Wert ist 1, wenn ein Fehler aufgetreten ist in der
Versuchsliste, sonst 0. Wenn TRY_BLOCK_ERROR wird während der Immerliste, der Fehler
Zustand verursacht durch die Versuchsliste wird zurückgesetzt und die Shell-Ausführung wird normal fortgesetzt
nach dem ende von Immerliste. Ändern des Wertes während der Versuchsliste ist nicht nützlich
(es sei denn, dies ist Teil eines umschließenden immer Block).

Ungeachtet TRY_BLOCK_ERROR, nach dem Ende von Immerliste der normale Shell-Status
$? ist der zurückgegebene Wert von Versuchsliste. Dieser Wert ist ungleich Null, wenn es eine
Fehler, auch wenn TRY_BLOCK_ERROR wurde auf Null gesetzt.

Der folgende Code führt den angegebenen Code aus und ignoriert dabei alle Fehler, die er verursacht. Dies ist ein
Alternative zur üblichen Konvention, Code zu schützen, indem man ihn in einem
Unterschale.

{
# Code welche Mai Ursache an Fehler
} immer {
# Dieser Code is ausgeführt ungeachtet of die Fehler.
(( TRY_BLOCK_ERROR = 0 ))
}
# Die Fehler Zustand hat war zurücksetzen.

An wunsch Befehl (oder ein Rückkehr Befehl, der auf der äußersten Funktionsebene eines
Skript) angetroffen in Versuchsliste die nicht die Ausführung von Immerliste.
Stattdessen wird die Shell sofort nach jedem EXIT Trap wurde ausgeführt.

Funktion Wort ... [ () ] [ Begriff ] { Liste }
Wort ... () [ Begriff ] { Liste }
Wort ... () [ Begriff ] Befehl
woher Begriff ist ein oder mehrere Zeilenumbrüche oder ;Definieren Sie eine Funktion, die referenziert wird durch
irgendjemand von WortNormalerweise nur ein Wort wird bereitgestellt; mehrere Worts sind in der Regel
nur zum Setzen von Traps nützlich. Der Hauptteil der Funktion ist die Liste zwischen den {
und }Siehe Abschnitt „Funktionen“.

Wenn die Option SH_GLOB ist für die Kompatibilität mit anderen Shells gesetzt, dann Leerzeichen
kann zwischen der linken und rechten Klammer erscheinen, wenn es eine einzelne Wort;
Andernfalls werden die Klammern als ein Globbing-Muster betrachtet, in dem
Fall.

In allen oben genannten Formen kann eine Umleitung außerhalb des Funktionskörpers erfolgen, z. B.
Beispiel

func() { ... } 2> & 1

Die Umleitung wird mit der Funktion gespeichert und angewendet, wenn die Funktion
ausgeführt. Alle Variablen in der Umleitung werden an der Stelle erweitert, an der die Funktion
wird ausgeführt, jedoch außerhalb des Funktionsumfangs.

Zeit [ Pipeline ]
Die Pipeline wird ausgeführt und die Zeitstatistik wird auf der Standardfehlerseite gemeldet
in der von der ZEITFMT Parameter. Wenn Pipeline wird weggelassen, drucken
Statistiken über den Shell-Prozess und seine untergeordneten Prozesse.

[[ exp ]]
Wertet den bedingten Ausdruck aus exp und gibt einen Null-Exit-Status zurück, wenn dies der Fall ist.
true. Siehe Abschnitt „Bedingte Ausdrücke“ für eine Beschreibung von exp.

WECHSELN FORMEN FÜR KOMPLEX BEFEHLE


Viele der komplexen Befehle von zsh haben alternative Formen. Diese sind nicht standardisiert und
selbst für erfahrene Shell-Programmierer wahrscheinlich nicht offensichtlich; sie sollten nicht verwendet werden
überall dort, wo die Portabilität von Shellcode ein Problem darstellt.

Die folgenden Kurzversionen funktionieren nur, wenn Unterliste hat die Form `{ Liste }' oder wenn die
KURZE_LOOPS Option aktiviert ist. Für die if, während und bis Befehle, in beiden Fällen die
Der Testteil der Schleife muss ebenfalls entsprechend abgegrenzt werden, beispielsweise durch `[[ ... ]]' oder `(( ...
))', sonst wird das Ende des Tests nicht erkannt. Für die für , wiederholen, Häuser und
wählen Befehle keine solche spezielle Form für die Argumente erforderlich, aber die anderen
Zustand (die besondere Form der Unterliste oder die Nutzung der KURZE_LOOPS Option) gilt weiterhin.

if Liste { Liste } [ elif Liste { Liste } ] ... [ sonst { Liste } ]
Eine alternative Form von ifDie Regeln bedeuten, dass

if [[ -o Klammern ignorieren ]] {
drucken ja
}

funktioniert, aber

if was immer dies auch sein sollte. { # Beeinflusst die nicht arbeiten!
drucken ja
}

die nicht, da der Test nicht geeignet abgegrenzt ist.

if Liste Unterliste
Eine Kurzform der Alternative ifDie gleichen Einschränkungen hinsichtlich der Form von Liste sich bewerben
wie beim vorherigen Formular.

für Name ... ( Wort ... ) Unterliste
Eine Kurzform von für .

für Name ... [ in Wort ... ] Begriff Unterliste
woher Begriff ist mindestens ein Zeilenumbruch oder ;Eine weitere Kurzform von für .

für (( [Ausdruck1] ; [Ausdruck2] ; [Ausdruck3] )) Unterliste
Eine Kurzform der Arithmetik für Befehl.

foreach Name ... ( Wort ... ) Liste Ende
Eine andere Form von für .

während Liste { Liste }
Eine alternative Form von währendBeachten Sie die Einschränkungen hinsichtlich der Form von Liste erwähnt
zu teilen.

bis Liste { Liste }
Eine alternative Form von bisBeachten Sie die Einschränkungen hinsichtlich der Form von Liste erwähnt
zu teilen.

wiederholen Wort Unterliste
Dies ist eine Kurzform von wiederholen.

Häuser Wort { [[(] Anleitungen [ | Anleitungen ] ... ... ) Liste (;;|;&|;|) ] ... }
Eine alternative Form von Häuser.

wählen Name [ in Wort ... Begriff ] Unterliste
woher Begriff ist mindestens ein Zeilenumbruch oder ;Eine Kurzform von wählen.

RESERVIERT WORTE


Die folgenden Wörter werden als reservierte Wörter erkannt, wenn sie als erstes Wort einer
Befehl, sofern er nicht in Anführungszeichen gesetzt oder deaktiviert wird deaktivieren -r:

do erledigt esac dann elif sonst fi für Häuser if während Funktion wiederholen Zeit bis wählen koprok
nicht korrekt foreach Ende ! [[ { } erklären exportieren schweben ganze Zahl aus einer regionalen schreibgeschützt setzen

Zusätzlich `}' wird in jeder Position erkannt, wenn weder die IGNORE_BRACES Option noch
die IGNORE_CLOSE_BRACES Option ist gesetzt.

FEHLER


Bestimmte Fehler werden von der Shell als fatal behandelt: In einer interaktiven Shell verursachen sie
Steuerung, um zur Befehlszeile zurückzukehren, und in einer nicht-interaktiven Shell bewirken sie, dass die Shell
abgebrochen werden. In älteren Versionen von zsh würde eine nicht-interaktive Shell, die ein Skript ausführt,
nicht vollständig abbrechen, sondern die Ausführung beim nächsten zu lesenden Befehl aus dem
Skript, wobei der Rest aller Funktionen oder Shell-Konstrukte wie Schleifen oder
Bedingungen; dieses etwas unlogische Verhalten kann durch Setzen der Option
CONTINUE_ON_ERROR.

Zu den schwerwiegenden Fehlern in nicht interaktiven Shells gehören:

· Fehler beim Parsen der Shell-Optionen, die beim Aufruf der Shell übergeben wurden

· Fehler beim Ändern der Optionen mit dem kompensieren builtin

· Analysefehler aller Art, einschließlich Fehlern bei der Analyse mathematischer Ausdrücke

· Fehler beim Festlegen oder Ändern des variablen Verhaltens mit setzen, aus einer regionalen, erklären, exportieren,
ganze Zahl, schweben

· Ausführung falsch positionierter Schleifenkontrollstrukturen (fortsetzen, brechen)

· Versuche, reguläre Ausdrücke zu verwenden, obwohl kein Modul für reguläre Ausdrücke verfügbar ist

· Nicht zulässige Operationen, wenn die BESCHRÄNKT Optionen sind eingestellt

· Fehler beim Erstellen eines für eine Pipeline benötigten Rohrs

· Fehler beim Erstellen eines Multio

· Fehler beim automatischen Laden eines für eine deklarierte Shell-Funktion benötigten Moduls

· Fehler beim Erstellen von Befehls- oder Prozessersetzungen

· Syntaxfehler in Glob-Qualifizierern

· Fehler bei der Dateigenerierung wurden von der Option nicht erfasst BAD_PATTERN

· Alle fehlerhaften Muster, die zum Abgleichen innerhalb von Case-Anweisungen verwendet werden

· Fehler bei der Dateigenerierung wurden nicht verursacht durch KEINE ÜBEREINSTIMMUNG oder ähnliche Optionen

· Alle Dateigenerierungsfehler, bei denen das Muster zum Erstellen eines Multio verwendet wurde

· Speicherfehler wurden von der Shell erkannt

· Ungültige Indizes für Shell-Variablen

· Versuche, schreibgeschützte Variablen zuzuweisen

· Logische Fehler bei Variablen wie z.B. Zuweisung zum falschen Typ

· Verwendung ungültiger Variablennamen

· Fehler in der Variablensubstitutionssyntax

· Fehler beim Konvertieren von Zeichen in $'...' Ausdrücke

Besitzt das POSIX_BUILTINS Option gesetzt ist, mehr Fehler im Zusammenhang mit Shell-Builtin-Befehlen
werden gemäß dem POSIX-Standard als fatal behandelt.

IHRE NACHRICHT


In nicht-interaktiven Shells oder in interaktiven Shells mit dem INTERACTIVE_COMMENTS ganz ohne irgendetwas tun oder drücken zu müssen.
Satz, ein Wort, das mit dem dritten Buchstaben des histchars Parameter (`#' standardmäßig)
bewirkt, dass dieses Wort und alle folgenden Zeichen bis zu einem Zeilenumbruch ignoriert werden.

ALIASING


Jeder Anspruchsberechtigte Wort in der Shell-Eingabe wird geprüft, ob ein Alias ​​definiert ist für
es. Wenn ja, wird es durch den Text des Alias ​​ersetzt, wenn es sich in der Befehlsposition befindet (wenn es
könnte das erste Wort eines einfachen Befehls sein), oder wenn der Alias ​​global ist. Wenn die
Ersetzungstext endet mit einem Leerzeichen, das nächste Wort in der Shell-Eingabe ist immer zulässig
für Zwecke der Aliaserweiterung. Ein Alias ​​wird definiert mit dem alias eingebaut; global
Aliase können definiert werden mit dem -g Option zu diesem integrierten.

A Wort ist definiert als:

· Jedes einfache String- oder Glob-Muster

· Jede Zeichenfolge in Anführungszeichen, mit einer beliebigen Anführungsmethode (beachten Sie, dass die Anführungszeichen Teil von
die Alias-Definition, damit dies zulässig ist)

· Jede Parameterreferenz oder Befehlsersetzung

· Jede beliebige Reihe der oben genannten Elemente, aneinandergereiht ohne Leerzeichen oder andere Zeichen
zwischen ihnen

· Jedes reservierte Wort (Häuser, do, sonst, Usw.)

· Mit globalem Aliasing, jedem Befehlstrennzeichen, jedem Umleitungsoperator und `(' oder
`)' wenn nicht Teil eines Glob-Musters

Es ist derzeit nicht möglich, den `((' Token, das Arithmetik einführt
Ausdrücke, denn bis eine vollständige Anweisung analysiert wurde, kann sie nicht unterschieden werden
aus zwei aufeinanderfolgenden `('-Token, die verschachtelte Unterschalen einführen.

Wann POSIX_ALIASES gesetzt ist, sind nur einfache Zeichenfolgen ohne Anführungszeichen für Aliasing geeignet. Die
alias Builtin lehnt nicht zulässige Aliase nicht ab, sie werden jedoch nicht erweitert.

Die Aliaserweiterung wird vor allen anderen Erweiterungen außer dem Verlauf an der Shell-Eingabe durchgeführt.
Erweiterung. Wenn also ein Alias ​​für das Wort definiert ist foo, Alias-Erweiterung kann
durch Anführung eines Wortteils vermieden werden, zB \foo. Jede Form des Zitierens funktioniert, obwohl es
Es gibt nichts, was die Definition eines Alias ​​für die zitierte Form verhindern könnte, wie etwa \foo .
Auch wenn ein Trennzeichen wie && ist ein Alias, \&& verwandelt sich in die beiden Spielsteine \& und &, Die jeweils
von denen möglicherweise separat ein Alias ​​verwendet wurde. Ähnlich verhält es sich mit \<, \>|, usw.

Zur Verwendung mit der Vervollständigung, die einen anfänglichen Backslash gefolgt von einem Zeichen entfernt
das nichts Besonderes ist, kann es bequemer sein, das Wort zu zitieren, indem man mit einem einzigen beginnt
Zitat, dh 'foo;-Vervollständigung fügt automatisch das abschließende einfache Anführungszeichen hinzu.

Es gibt ein häufig auftretendes Problem mit Aliasnamen, das durch den folgenden Code veranschaulicht wird:

alias echobar='echo Bar'; Echobar

Dies gibt eine Meldung aus, dass der Befehl Echobar konnte nicht gefunden werden. Dies liegt daran,
Aliase werden beim Einlesen des Codes erweitert; die gesamte Zeile wird auf einmal gelesen, so dass
wann Echobar ausgeführt wird, ist es zu spät, den neu definierten Alias ​​zu erweitern. Dies ist oft
ein Problem in Shell-Skripten, Funktionen und Code, der mit ` ausgeführt wirdQuelle' oder `.'.
Aus diesem Grund wird in nicht interaktivem Code die Verwendung von Funktionen anstelle von Aliasnamen empfohlen.

Beachten Sie auch die nicht hilfreiche Interaktion von Aliasnamen und Funktionsdefinitionen:

alias func='noglob Funktion'
func() {
Echo Do etwas mit $*
}

Da Aliase in Funktionsdefinitionen erweitert werden, führt dies dazu, dass der folgende Befehl
ausgeführt werden:

noglob func() {
Echo Do etwas mit $*
}

was definiert noglob und auch die Funkt als Funktionen mit dem gegebenen Körper. Um dies zu vermeiden,
entweder den Namen zitieren Funkt oder verwenden Sie die alternative Funktionsdefinitionsform `Funktion
Funkt'. Sicherzustellen, dass der Alias ​​definiert ist, nachdem die Funktion funktioniert, ist aber problematisch, wenn die
Codefragment könnte erneut ausgeführt werden.

ZITIEREN


Ein Charakter kann zitiert (das heißt, es muss für sich selbst stehen), indem man ihm ein ` voranstellt\'.
`\' gefolgt von einem Zeilenumbruch wird ignoriert.

Eine Zeichenfolge, eingeschlossen zwischen `$'' und `'' wird auf die gleiche Weise verarbeitet wie die String-Argumente
drucken eingebaut, und die resultierende Zeichenfolge wird als vollständig in Anführungszeichen gesetzt betrachtet. Ein
wörtlich `''-Zeichen können in die Zeichenfolge eingefügt werden, indem das `\'' fliehen.

Alle Zeichen, die zwischen einem Paar einfacher Anführungszeichen (''), dem kein ` vorangestellt ist$'
sind in Anführungszeichen gesetzt. Ein einfaches Anführungszeichen kann nicht innerhalb von einfachen Anführungszeichen stehen, es sei denn, die Option RC_QUOTES
gesetzt ist, wobei ein Paar einfacher Anführungszeichen in ein einfaches Anführungszeichen umgewandelt wird. Für
Beispiel

drucken '' ''

gibt nichts außer einem Zeilenumbruch aus, wenn RC_QUOTES ist nicht gesetzt, aber ein einfaches Anführungszeichen, wenn es
wird gesetzt.

In doppelten Anführungszeichen (""), Parameter- und Befehlsersetzungen erfolgen und `\' zitiert die
Zeichen `\', ``', `"' und `$'.

UMLEITUNG


Wenn auf einen Befehl folgt & und die Jobsteuerung nicht aktiv ist, dann der Standardstandard
Eingabe für den Befehl ist die leere Datei / dev / null. Ansonsten ist die Umgebung für die
Die Ausführung eines Befehls enthält die Dateideskriptoren der aufrufenden Shell, wie sie von geändert wurden
Ein-/Ausgabespezifikationen.

Folgendes kann an beliebiger Stelle in einem einfachen Befehl erscheinen oder einem komplexen vorangehen oder folgen
Befehl. Die Erweiterung erfolgt vor Wort or Ziffer wird verwendet, außer wie unten angegeben. Wenn die
Ergebnis der Substitution auf Wort erzeugt mehr als einen Dateinamen, erfolgt die Umleitung für
jeden einzelnen Dateinamen der Reihe nach.

< Wort Öffnen Sie die Datei Wort zum Lesen als Standardeingabe.

<> Wort
Öffnen Sie die Datei Wort zum Lesen und Schreiben als Standardeingabe. Wenn die Datei nicht
existiert, dann wird es erstellt.

> Wort Öffnen Sie die Datei Wort zum Schreiben als Standardausgabe. Wenn die Datei nicht existiert, dann
wird erstellt. Wenn die Datei existiert und die KLAMOTTEN Wenn die Option nicht gesetzt ist, führt dies zu einem
Fehler; andernfalls wird es auf die Länge Null gekürzt.

>| Wort
>! Wort
Das gleiche wie >, außer dass die Datei auf die Länge Null gekürzt wird, wenn sie existiert, auch wenn
KLAMOTTEN ist nicht gesetzt.

>> Wort
Öffnen Sie die Datei Wort zum Schreiben im Anfügemodus als Standardausgabe. Wenn die Datei nicht
existieren, und die KLAMOTTEN Wenn die Option nicht gesetzt ist, tritt ein Fehler auf. Andernfalls wird die Datei
geschaffen.

>>| Wort
>>! Wort
Das gleiche wie >>, außer dass die Datei erstellt wird, wenn sie nicht existiert, auch wenn KLAMOTTEN
ist nicht gesetzt.

<<[-] Wort
Die Shell-Eingabe wird bis zu einer Zeile gelesen, die mit der identisch ist Wort, oder zu einem
Dateiende. Keine Parametererweiterung, Befehlsersetzung oder Dateinamengenerierung
wird durchgeführt am Wort. Das resultierende Dokument mit der Bezeichnung a Hier-Dokument, wird zum
Standardeingabe.

Wenn ein beliebiges Zeichen von Wort wird mit einfachen oder doppelten Anführungszeichen oder einem ` zitiert\', NEIN
Interpretation erfolgt anhand der Zeichen des Dokuments. Andernfalls wird der Parameter
und es erfolgt eine Befehlsersetzung, `\' gefolgt von einem Zeilenumbruch wird entfernt, und `\' muss
verwendet werden, um die Zeichen `\', `$', ``' und das erste Zeichen von Wort.

Beachten Sie, dass Wort selbst unterliegt keiner Shell-Erweiterung. Backquotes in Wort unterlasse
haben ihre übliche Wirkung; stattdessen verhalten sie sich ähnlich wie doppelte Anführungszeichen, außer
dass die Backquotes selbst unverändert weitergegeben werden. (Diese Information ist
Der Vollständigkeit halber werden diese Zitate angegeben und die Verwendung von Backquotes wird nicht empfohlen.) Zitate
in der Form $'...' haben ihren Standardeffekt der Erweiterung von Backslash-Referenzen
auf Sonderzeichen.

If <<- verwendet wird, werden alle führenden Tabulatoren entfernt von Wort und aus dem Dokument.

<< Wort
Führen Sie eine Shell-Erweiterung durch auf Wort und übergibt das Ergebnis an die Standardeingabe. Dies ist
bekannt als Hier-ZeichenfolgeVergleichen Sie die Verwendung von Wort in den hier oben genannten Dokumenten, wo
Wort erfährt keine Shell-Expansion.

<& Anzahl
>& Anzahl
Die Standard-Ein-/Ausgabe wird vom Dateideskriptor dupliziert Anzahl (sehen dup2(2)).

<& -
>& - Schließen Sie die Standard-Ein-/Ausgabe.

<& p
>& p Die Ein-/Ausgabe vom/zum Coprozess wird auf die Standard-Ein-/Ausgabe verschoben.

>& Wort
&> Wort
(Außer wenn `>& Wort' entspricht einer der oben genannten Syntaxen; `&>' kann immer verwendet werden
um diese Mehrdeutigkeit zu vermeiden.) Leitet sowohl die Standardausgabe als auch die Standardfehler (Datei
Deskriptor 2) in der Art von `> Wort'. Beachten Sie, dass dies nicht das selbe haben
Wirkung als `> Wort 2> & 1' bei Vorhandensein von Multios (siehe Abschnitt unten).

>&| Wort
>&! Wort
&>| Wort
&>! Wort
Leitet sowohl die Standardausgabe als auch den Standardfehler (Dateideskriptor 2) auf folgende Weise um
von `>| Wort'.

>>> Wort
&>> Wort
Leitet sowohl die Standardausgabe als auch den Standardfehler (Dateideskriptor 2) auf folgende Weise um
von `>> Wort'.

>>&| Wort
>>&! Wort
&>>| Wort
&>>! Wort
Leitet sowohl die Standardausgabe als auch den Standardfehler (Dateideskriptor 2) auf folgende Weise um
von `>>| Wort'.

Wenn vor einem der oben genannten Punkte eine Ziffer steht, handelt es sich bei dem Dateideskriptor um den
durch die Ziffer anstelle der Standard 0 oder 1 angegeben. Die Reihenfolge, in der Umleitungen
angegeben ist, ist signifikant. Die Shell wertet jede Umleitung anhand der (Datei
Deskriptor, Datei) Assoziation zum Zeitpunkt der Auswertung. Zum Beispiel:

... 1>Fanname 2> & 1

Ordnet zunächst Dateideskriptor 1 der Datei zu Fanname. Anschließend wird Dateideskriptor 2 zugeordnet
mit der Datei, die dem Dateideskriptor 1 zugeordnet ist (das heißt, Fanname). Wenn die Reihenfolge von
Wenn die Umleitungen umgekehrt würden, wäre Dateideskriptor 2 dem Terminal zugeordnet
(vorausgesetzt, Dateideskriptor 1 wäre vorhanden gewesen) und dann wäre Dateideskriptor 1 zugeordnet
Datei Fanname.

Die `|&' Befehlstrennzeichen, beschrieben in Einfacher Befehle & Pipelines in zschmisc(1) ist a
Abkürzung für `2> & 1 |'.

Die verschiedenen Formen der Prozesssubstitution, `<(Liste)' und `=(Liste)' für die Eingabe und
`>(Liste)' für die Ausgabe werden oft zusammen mit der Umleitung verwendet. Wenn zum Beispiel Wort in
eine Ausgabeumleitung hat die Form `>(Liste)' dann wird die Ausgabe an den Befehl weitergeleitet
vertreten durch Liste. Sehen Prozess Substitution in zshexpn(1).

ERÖFFNUNG FILE BESCHREIBUNGEN VERWENDUNG PARAMETER


Wenn die Shell Argumente für einen Befehl analysiert und die Shell-Option IGNORE_BRACES is
nicht gesetzt ist, ist eine andere Form der Umleitung zulässig: anstelle einer Ziffer vor dem
Operator gibt es eine gültige Shell-Kennung in Klammern. Die Shell öffnet eine neue
Dateideskriptor, der garantiert mindestens 10 ist, und setzen Sie den Parameter, der durch den
Kennung für den geöffneten Dateideskriptor. Zwischen den schließenden
Klammer und das Umleitungszeichen. Beispiel:

... {myfd}>&1

Dies öffnet einen neuen Dateideskriptor, der ein Duplikat von Dateideskriptor 1 ist und setzt den
Parameter meinfd zur Nummer des Dateideskriptors, die mindestens 10 sein wird. Die neue
Dateideskriptor kann mit der Syntax geschrieben werden >&$myfd.

Die Syntax {Varid}>&-Beispielsweise {myfd}>&-, kann verwendet werden, um einen Dateideskriptor zu schließen
geöffnet. Beachten Sie, dass der Parameter gegeben durch Varid muss vorher eingestellt werden auf
in diesem Fall ein Dateideskriptor.

Es ist ein Fehler, einen Dateideskriptor auf diese Weise zu öffnen oder zu schließen, wenn der Parameter
schreibgeschützt. Es ist jedoch kein Fehler, einen Dateideskriptor mit <&$stoppen
or >&$stoppen if stoppen ist schreibgeschützt.

Wenn die Option KLAMOTTEN nicht gesetzt ist, ist es ein Fehler, einen Dateideskriptor mit einem Parameter zu öffnen
der bereits auf einen offenen Dateideskriptor eingestellt ist, der zuvor von diesem Mechanismus zugewiesen wurde.
Durch Aufheben der Parametereinstellung vor der Verwendung zum Zuweisen eines Dateideskriptors wird der Fehler vermieden.

Beachten Sie, dass dieser Mechanismus lediglich einen Dateideskriptor zuweist oder schließt; er führt nicht
Umleitungen von oder zu diesem Objekt. Normalerweise ist es praktisch, einen Dateideskriptor zuzuweisen
vor der Verwendung als Argument für execDie Syntax funktioniert in keinem Fall, wenn sie verwendet wird
um komplexe Befehle wie eingeklammerte Subshells oder Schleifen, bei denen die öffnende Klammer
wird als Teil einer Befehlsliste interpretiert, die in der aktuellen Shell ausgeführt werden soll.

Nachfolgend sehen Sie eine typische Abfolge der Zuordnung, Verwendung und Schließung einer Datei.
Beschreibung:

ganze Zahl meinfd
exec {myfd}>~/logs/mylogfile.txt
drucken Dieser is a Log Nachricht. >&$myfd
exec {myfd}>&-

Beachten Sie, dass die Erweiterung der Variablen im Ausdruck >&$myfd tritt an dem Punkt ein, an dem
Umleitung geöffnet wird. Dies geschieht nach der Erweiterung der Befehlsargumente und nach jedem
Weiterleitungen nach links auf der Befehlszeile wurden verarbeitet.

MULTIOS


Wenn der Benutzer versucht, einen Dateideskriptor mehr als einmal zum Schreiben zu öffnen, öffnet die Shell
den Dateideskriptor als Pipe zu einem Prozess, der seine Eingabe in alle angegebenen
Ausgänge, ähnlich wie Abschlag, vorausgesetzt die MULTIOS Die Option ist standardmäßig aktiviert. Daher:

Datum >foo >bar

schreibt das Datum in zwei Dateien mit dem Namen `foo' und `Bar'. Beachten Sie, dass eine Pipe eine implizite
Umleitung; somit

Datum >foo | Katze

schreibt das Datum in die Datei `foo', und leitet es auch an cat weiter.

Besitzt das MULTIOS Wenn diese Option aktiviert ist, unterliegt das Wort nach einem Umleitungsoperator ebenfalls
Dateinamengenerierung (Globbing). Somit

: > *

kürzt alle Dateien im aktuellen Verzeichnis, vorausgesetzt, es gibt mindestens eine. (Ohne
die MULTIOS Option, würde es eine leere Datei mit dem Namen ` erstellen*'.) Ähnlich können Sie

Echo wunsch 0 >> *.Sch

Wenn der Benutzer versucht, einen Dateideskriptor mehr als einmal zum Lesen zu öffnen, öffnet die Shell
Der Dateideskriptor als Pipe zu einem Prozess, der alle angegebenen Eingaben in seinen
Ausgabe in der angegebenen Reihenfolge, ähnlich wie Katze, vorausgesetzt die MULTIOS Option aktiviert ist. Somit

sortieren <foo <fubar

oder

sortieren <f{oo,ubar}

ist äquivalent zu `Katze foo Fubar | sortieren'.

Die Erweiterung des Umleitungsarguments erfolgt an der Stelle, an der die Umleitung geöffnet wird, bei
der oben beschriebene Punkt für die Erweiterung der Variable in >&$myfd.

Beachten Sie, dass eine Pipe eine implizite Umleitung ist.

Katze Bar | sortieren <foo

ist äquivalent zu `Katze Bar foo | sortieren' (beachten Sie die Reihenfolge der Eingaben).

Besitzt das MULTIOS Option ist ungesetzt, ersetzt jede Umleitung die vorherige Umleitung für
dieser Dateideskriptor. Allerdings werden alle umgeleiteten Dateien tatsächlich geöffnet, also

Echo Hallo > Bar > baz

wann MULTIOS ist nicht gesetzt wird abgeschnitten `Bar', und schreiben Sie `Hallo' in `baz'.

Es gibt ein Problem, wenn ein Output-Multio an ein externes Programm angeschlossen wird. Ein einfaches
Beispiel zeigt dies:

Katze Datei >Datei1 >Datei2
Katze file1 file2

Hier ist es möglich, dass die zweite `Katze' zeigt nicht den gesamten Inhalt von file1 und
file2 (d. h. der ursprüngliche Inhalt von Datei zweimal wiederholt).

Der Grund hierfür ist, dass die Multios nach dem Katze Prozess wird geforkt von
die übergeordnete Shell, sodass die übergeordnete Shell nicht wartet, bis das Multios mit dem Schreiben fertig ist
Daten. Dies bedeutet, dass der Befehl wie gezeigt beendet werden kann, bevor file1 und file2 sind komplett
geschrieben. Als Workaround ist es möglich, die Katze Prozess als Teil einer Arbeit in der
aktuelle Shell:

{ Katze Datei } >Datei >Datei2

Hier, die {...} Der Job wird angehalten, um zu warten, bis beide Dateien geschrieben sind.

WEITERLEITUNGEN MIT NEIN COMMAND


Wenn ein einfacher Befehl aus einem oder mehreren Umleitungsoperatoren und null oder mehr
Parameterzuweisungen, aber kein Befehlsname, zsh kann sich auf verschiedene Arten verhalten.

Wenn der Parameter NULLCMD ist nicht gesetzt oder die Option CSH_NULLCMD gesetzt ist, wird ein Fehler verursacht.
Dies ist die csh Verhalten und CSH_NULLCMD ist standardmäßig eingestellt, wenn emuliert wird csh.

Wenn die Option SH_NULLCMD gesetzt ist, wird das eingebaute `:' wird als Befehl mit der angegebenen
Umleitungen. Dies ist die Standardeinstellung beim Emulieren sh or ksh.

Andernfalls, wenn der Parameter NULLCMD gesetzt ist, wird sein Wert als Befehl mit dem
gegebene Umleitungen. Wenn beide NULLCMD und READNULLCMD gesetzt sind, dann ist der Wert des letzteren
wird anstelle des vorherigen verwendet, wenn die Umleitung eine Eingabe ist. Der Standard
für NULLCMD ist `Katze' und für READNULLCMD ist `mehr'. Daher

< Datei

zeigt den Inhalt von Datei auf der Standardausgabe, mit Paging, wenn es sich um ein Terminal handelt. NULLCMD
und READNULLCMD kann sich auf Shell-Funktionen beziehen.

COMMAND EXECUTION


Wenn ein Befehlsname keine Schrägstriche enthält, versucht die Shell, ihn zu finden. Wenn ein
Shell-Funktion mit diesem Namen, wird die Funktion wie im Abschnitt beschrieben aufgerufen
`Funktionen'. Wenn ein Shell-Builtin mit diesem Namen existiert, wird das Builtin aufgerufen.

Andernfalls durchsucht die Shell jedes Element von $ path für ein Verzeichnis mit einem
ausführbare Datei mit diesem Namen. Wenn die Suche erfolglos ist, gibt die Shell eine Fehlermeldung aus
Nachricht und gibt einen Beendigungsstatus ungleich Null zurück.

Wenn die Ausführung fehlschlägt, weil die Datei nicht im ausführbaren Format vorliegt und die Datei kein
Verzeichnis, es wird davon ausgegangen, dass es sich um ein Shell-Skript handelt. / Bin / sh wird erzeugt, um es auszuführen. Wenn die
Programm ist eine Datei, die mit ` beginnt#!', der Rest der ersten Zeile gibt eine
Interpreter für das Programm. Die Shell führt den angegebenen Interpreter auf
Betriebssysteme, die dieses ausführbare Format im Kernel nicht verarbeiten.

Wenn kein externer Befehl gefunden wird, sondern eine Funktion Befehlshandler „nicht gefunden“ existiert die Schale
führt diese Funktion mit allen Kommandozeilenargumenten aus. Die Funktion sollte den Status zurückgeben
Null, wenn der Befehl erfolgreich ausgeführt wurde, oder ein Status ungleich Null, wenn er fehlgeschlagen ist. Im
Im letzteren Fall wird die Standardbehandlung angewendet: `Befehl nicht gefunden' wird auf Standard gedruckt
Fehler und die Shell wird mit Status 127 beendet. Beachten Sie, dass der Handler in einem
Subshell wurde geforkt, um einen externen Befehl auszuführen, daher Änderungen an Verzeichnissen, Shell
Parameter usw. haben keine Auswirkungen auf die Hauptshell.

FUNKTIONEN


Shell-Funktionen werden definiert mit dem Funktion reserviertes Wort oder die spezielle Syntax
`Funkname ()'. Shell-Funktionen werden eingelesen und intern gespeichert. Aliasnamen sind
beim Lesen der Funktion aufgelöst. Funktionen werden wie Befehle mit dem
Argumente, die als Positionsparameter übergeben werden. (Siehe Abschnitt „Befehlsausführung“.)

Funktionen werden im selben Prozess wie der Anrufer ausgeführt und teilen alle Dateien und präsentieren
Arbeitsverzeichnis mit dem Anrufer. Eine Falle auf EXIT set innerhalb einer Funktion wird ausgeführt, nachdem
die Funktion wird in der Umgebung des Anrufers abgeschlossen.

Die Rückkehr Builtin wird verwendet, um von Funktionsaufrufen zurückzukehren.

Funktionskennungen können mit dem Funktionen eingebaut. Funktionen können undefiniert sein
an. Nach der Installation können Sie HEIC-Dateien mit der unfunktionell eingebaut.

AUTOLADEN FUNKTIONEN


Eine Funktion kann gekennzeichnet werden als undefiniert Verwendung der Autoload eingebaut (oder `Funktionen -u' oder
`setzen -fu'). Eine solche Funktion hat keinen Hauptteil. Bei der ersten Ausführung der Funktion wird die
Shell sucht nach seiner Definition anhand der Elemente des fpath Variable. Somit zu
Definieren Sie Funktionen zum automatischen Laden. Eine typische Sequenz ist:

fpath=(~/meineFunktionen $fpath)
Autoload meineFunktion1 meineFunktion2 ...

Die übliche Aliaserweiterung beim Lesen wird unterdrückt, wenn der Autoload eingebaut oder seine
gleichwertig ist, wird die Möglichkeit gegeben -U. Dies wird für die Nutzung der bereitgestellten Funktionen empfohlen
mit der zsh-Distribution. Beachten Sie, dass für Funktionen, die mit der zcompile builtin
befehlige die Flagge -U muss bereitgestellt werden, wenn die .zwc Datei wird erstellt, da die entsprechende
In letzterem werden Informationen zusammengestellt.

Für jeden Element in fpathsucht die Shell nach drei möglichen Dateien, von denen die neueste
wird verwendet, um die Definition für die Funktion zu laden:

Element.zwc
Eine Datei, erstellt mit dem zcompile eingebauter Befehl, der voraussichtlich die
Definitionen für alle Funktionen im Verzeichnis mit dem Namen ElementDie Datei wird behandelt
wird auf die gleiche Weise wie ein Verzeichnis mit Dateien für Funktionen durchsucht und
für die Definition der Funktion. Wenn die Definition nicht gefunden wird, wird die Suche
Zur Definition fahren Sie mit den beiden anderen, unten beschriebenen Möglichkeiten fort.

If Element beinhaltet bereits eine .zwc Erweiterung (d. h. die Erweiterung wurde explizit
vom Benutzer angegeben), Element wird nach der Definition der Funktion gesucht, ohne
Vergleichen Sie sein Alter mit dem anderer Dateien. Tatsächlich muss es keine geben
Verzeichnis namens Element ohne das Suffix. Somit enthält ein Element wie
`/usr/local/funcs.zwc' im fpath beschleunigt die Suche nach Funktionen, mit der
Nachteil, dass die enthaltenen Funktionen explizit von Hand neu kompiliert werden müssen, bevor
die Shell bemerkt alle Änderungen.

Element/Funktion.zwc
Eine Datei, erstellt mit zcompile, das voraussichtlich die Definition für enthält
Funktion. Es kann auch andere Funktionsdefinitionen enthalten, aber diese sind weder
geladen noch ausgeführt; eine so gefundene Datei wird durchsucht einzige für die Definition
of Funktion.

Element/Funktion
Eine Datei mit zsh-Befehlstext, der als Definition für Funktion.

Zusammenfassend ist die Reihenfolge der Suche zunächst in der Eltern of Verzeichnisse in fpath für
das neuere von entweder einem kompilierten Verzeichnis oder einem Verzeichnis in fpath; zweitens, wenn mehr als ein
davon enthält eine Definition für die gesuchte Funktion, die am weitesten links in der fpath
gewählt wird; und drittens, innerhalb eines Verzeichnisses, die neuere von entweder einer kompilierten Funktion oder einer
Es wird eine gewöhnliche Funktionsdefinition verwendet.

Besitzt das KSH_AUTOLOAD Option gesetzt ist oder die Datei nur eine einfache Definition der
Funktion wird der Inhalt der Datei ausgeführt. Dies definiert normalerweise die Funktion in
Frage, sondern kann auch Initialisierung durchführen, die im Kontext der
Funktionsausführung und kann daher lokale Parameter definieren. Es ist ein Fehler, wenn die
Die Funktion wird nicht durch das Laden der Datei definiert.

Andernfalls wird der Funktionskörper (ohne umgebendes `Funkname() {...}') wird als
vollständigen Inhalt der Datei. Diese Form ermöglicht die direkte Verwendung der Datei als
ausführbares Shell-Skript. Wenn die Verarbeitung der Datei dazu führt, dass die Funktion
neu definiert, wird die Funktion selbst nicht erneut ausgeführt. Um die Shell zu zwingen,
Initialisierung und rufen Sie dann die definierte Funktion auf. Die Datei sollte Initialisierung enthalten
Code (der ausgeführt und dann verworfen wird) zusätzlich zu einer vollständigen Funktionsdefinition
(die für nachfolgende Aufrufe der Funktion beibehalten wird) und ein Aufruf der Shell
Funktion, einschließlich aller Argumente, am Ende.

Nehmen wir zum Beispiel an, die Autoload-Datei Funkt enthält

func() { drucken Dieser is Funktion; }
drucken Funkt is initialisiert

dann `Funktion; Funkt' mit KSH_AUTOLOAD set erzeugt beim ersten Aufruf beide Nachrichten, aber
nur die Meldung `Dieser is Funkt' beim zweiten und den folgenden Anrufen. Ohne KSH_AUTOLOAD
gesetzt ist, wird beim ersten Aufruf die Initialisierungsnachricht erzeugt, und die andere Nachricht
beim zweiten und den folgenden Anrufen.

Es ist auch möglich, eine Funktion zu erstellen, die nicht als automatisch geladen markiert ist, aber lädt
seine eigene Definition durch die Suche fpath, indem Sie `Autoload -X' innerhalb einer Shell-Funktion.
Beispielsweise sind die folgenden Aussagen gleichwertig:

meinefunktion() {
Autoload -X
}
meinefunktion Argumente...

und

unfunktionell meinefunktion # if meinefunktion wurde definiert
Autoload meinefunktion
meinefunktion Argumente...

Tatsächlich ist die Funktionen Befehlsausgaben `builtin Autoload -X' als Hauptteil eines automatisch geladenen
Funktion. Dies geschieht, damit

eval "$(Funktionen)"

liefert ein vernünftiges Ergebnis. Eine echte automatisch geladene Funktion erkennt man an der
Vorhandensein des Kommentars `# undefiniert' im Text, da alle Kommentare verworfen werden aus
definierte Funktionen.

So laden Sie die Definition einer automatisch geladenen Funktion meinefunktion ohne Ausführung meinefunktionVerwenden Sie:

Autoload +X meinefunktion

ANONYMOUS FUNKTIONEN


Wenn für eine Funktion kein Name angegeben ist, ist sie „anonym“ und wird speziell behandelt. Entweder
Form der Funktionsdefinition kann verwendet werden: a `()' ohne vorangehenden Namen oder ein `Funktion'
mit einer unmittelbar folgenden öffnenden Klammer. Die Funktion wird unmittelbar am
Definitionspunkt und wird nicht für zukünftige Verwendung gespeichert. Der Funktionsname wird auf
`(anonym)'.

Argumente für die Funktion können als Wörter nach der schließenden Klammer angegeben werden, die definiert
die Funktion, daher, wenn es keine gibt, keine Argumente (außer $0) gesetzt sind. Dies ist ein
Unterschied zur Art und Weise, wie andere Funktionen analysiert werden: normale Funktionsdefinitionen können
gefolgt von bestimmten Schlüsselwörtern wie `sonst' oder `fi', die als Argumente für
anonyme Funktionen, so dass ein Zeilenumbruch oder Semikolon erforderlich ist, um Schlüsselwort
Deutung.

Beachten Sie auch, dass die Argumentliste aller umschließenden Skripte oder Funktionen ausgeblendet ist (wie
für jede andere Funktion, die an dieser Stelle aufgerufen wird, der Fall sein).

Umleitungen können auf die anonyme Funktion in der gleichen Weise angewendet werden wie auf eine
current-shell-Struktur in Klammern. Anonyme Funktionen werden hauptsächlich verwendet, um
bieten einen Bereich für lokale Variablen. Dies ist besonders praktisch in Startdateien als
diese bieten keinen eigenen lokalen Variablenbereich.

Zum Beispiel,

Variable=außerhalb
Funktion {
aus einer regionalen Variable=innen
drucken "I am $variabel mit Argumente $*"
} fehlen uns die Worte. und zur Abwicklung, Integrierung, Speicherung und
drucken "I am $variable"

gibt Folgendes aus:

I am innerhalb mit Argumente fehlen uns die Worte. und zur Abwicklung, Integrierung, Speicherung und
I am aussen

Beachten Sie, dass Funktionsdefinitionen mit Argumenten, die sich zu nichts erweitern, zum Beispiel `Name=;
Funktion $ name { ... }', werden nicht als anonyme Funktionen behandelt. Stattdessen sind sie
werden als normale Funktionsdefinitionen behandelt, bei denen die Definition stillschweigend verworfen wird.

SPECIAL FUNKTIONEN


Bestimmte Funktionen haben, sofern sie definiert sind, eine besondere Bedeutung für die Shell.

Haken Funktionen
Für die folgenden Funktionen ist es möglich, ein Array zu definieren, das den gleichen Namen hat wie das
Funktion mit `_Funktionen' angehängt. Jedes Element in einem solchen Array wird als Name von
eine auszuführende Funktion; sie wird im selben Kontext und mit denselben Argumenten ausgeführt wie
die Grundfunktion. Wenn zum Beispiel $chpwd_functions ist ein Array, das die Werte enthält
`mychpwd', `chpwd_save_dirstack', dann versucht die Shell, die Funktionen auszuführen
`chpwd', `mychpwd' und `chpwd_save_dirstack', in dieser Reihenfolge. Jede Funktion, die nicht
exist wird stillschweigend ignoriert. Eine durch diesen Mechanismus gefundene Funktion wird anderswo als
eine „Hook-Funktion“. Ein Fehler in einer Funktion führt dazu, dass nachfolgende Funktionen nicht ausgeführt werden.
Beachten Sie außerdem, dass ein Fehler in einer vorbef Haken bewirkt einen unmittelbar folgenden periodisch
Funktion nicht ausgeführt wird (obwohl sie bei der nächsten Gelegenheit ausgeführt werden kann).

chpwd Wird immer dann ausgeführt, wenn das aktuelle Arbeitsverzeichnis geändert wird.

periodisch
Wenn der Parameter ZEIT gesetzt ist, wird diese Funktion alle $PERIOD Sekunden
kurz vor einer Eingabeaufforderung. Beachten Sie, dass, wenn mehrere Funktionen mit dem Array definiert werden
periodische_funktionen nur ein Punkt wird auf den gesamten Funktionsumfang angewendet, und
Die geplante Zeit wird nicht zurückgesetzt, wenn die Liste der Funktionen geändert wird. Daher ist der Satz
von Funktionen wird immer zusammen aufgerufen.

vorbef Wird vor jeder Eingabeaufforderung ausgeführt. Beachten Sie, dass Precommand-Funktionen nicht erneut ausgeführt werden.
einfach weil die Befehlszeile neu gezeichnet wird, wie es zum Beispiel passiert, wenn ein
Es wird eine Benachrichtigung über einen beendeten Job angezeigt.

preexec
Wird ausgeführt, nachdem ein Befehl gelesen wurde und ausgeführt werden soll. Wenn der
Historienmechanismus aktiv ist (unabhängig davon, ob die Zeile aus dem
Verlaufspuffer), wird die vom Benutzer eingegebene Zeichenfolge als erstes Argument übergeben,
andernfalls ist es eine leere Zeichenfolge. Der eigentliche Befehl, der ausgeführt wird
(einschließlich erweiterter Aliase) wird in zwei verschiedenen Formen übergeben: das zweite Argument
ist eine einzeilige, größenbegrenzte Version des Befehls (mit Dingen wie Funktion
Textkörper ausgelassen); das dritte Argument enthält den vollständigen Text, der ausgeführt wird.

zshaddhistory
Wird ausgeführt, wenn eine Historienzeile interaktiv gelesen wurde, aber bevor sie
ausgeführt. Das einzige Argument ist die komplette Historienzeile (so dass jede beendende
Newline ist weiterhin vorhanden).

Wenn eine der Hook-Funktionen den Status 1 zurückgibt (oder einen anderen Wert ungleich Null als 2,
obwohl dies für zukünftige Versionen der Shell nicht garantiert ist) die Verlaufszeile
wird nicht gespeichert, bleibt aber im Verlauf, bis die nächste Zeile
ausgeführt, sodass Sie es sofort wiederverwenden oder bearbeiten können.

Wenn eine der Hook-Funktionen den Status 2 zurückgibt, wird die Verlaufszeile auf dem
interne Historienliste, aber nicht in die Historiendatei geschrieben. Im Falle eines Konflikts
der erste Statuswert ungleich Null wird übernommen.

Eine Hook-Funktion kann ` aufrufen.fc -p ...', um den Verlaufskontext zu wechseln, so dass die
Der Verlauf wird in einer anderen Datei gespeichert als in der globalen HISTATEI
Parameter. Dies wird speziell behandelt: Der Verlaufskontext wird automatisch
wiederhergestellt, nachdem die Verarbeitung der Verlaufszeile abgeschlossen ist.

Die folgende Beispielfunktion funktioniert mit einer der Optionen INC_APPEND_HISTORY or
SHARE_HISTORY gesetzt, damit die Zeile direkt nach dem
Verlaufseintrag hinzugefügt wird. Es fügt zunächst die Verlaufszeile zum normalen Verlauf hinzu mit
die neue Zeile entfernt, was normalerweise das richtige Verhalten ist. Dann schaltet es die
Verlaufskontext, sodass die Zeile in eine Verlaufsdatei im aktuellen
Verzeichnis.

zshaddhistory() {
drucken -sr -- ${1%%$'\n'}
fc -p .zsh_local_history
}

zshexit
Wird an dem Punkt ausgeführt, an dem die Haupt-Shell normal beendet wird. Dies ist nicht
aufgerufen durch das Verlassen von Subshells, noch wenn die exec Der Precommand-Modifikator wird vor
ein externer Befehl. Anders als TRAPEXIT, es wird nicht aufgerufen, wenn Funktionen beendet werden.

Falle Funktionen
Die folgenden Funktionen werden speziell behandelt, haben aber keine entsprechenden Hook-Arrays.

TRAPNAL
Wenn diese Funktion definiert und nicht null ist, wird sie immer dann ausgeführt, wenn die Shell Folgendes abfängt:
ein Signal SIGNAL, Wobei NAL ist ein Signalname, wie angegeben für das töten eingebaut. Die
Die Signalnummer wird als erster Parameter an die Funktion übergeben.

Wenn eine Funktion dieser Form definiert und null ist, werden die Shell und die Prozesse, die von
es wird ignorieren SIGNAL.

Der Rückgabestatus der Funktion wird speziell behandelt. Wenn er Null ist,
Es wird davon ausgegangen, dass das Signal verarbeitet wurde, und die Ausführung wird normal fortgesetzt.
Andernfalls verhält sich die Shell wie unterbrochen, mit der Ausnahme, dass der Rückgabestatus von
die Falle bleibt erhalten.

Programme, die durch nicht abgefangene Signale beendet werden, geben typischerweise den Status 128 zurück plus den
Signalnummer. Daher bewirkt Folgendes, dass der Handler für SIGINT drucken
Nachricht, und ahmen Sie dann die übliche Wirkung des Signals nach.

TRAPINT() {
drucken "Erwischt UNTERSCHRIFT, Abbruch."
Rückkehr $(( 128 + $1 ))
}

Die Funktionen TRAPZERR, TRAPDEBUG und TRAPEXIT werden nie innerhalb anderer ausgeführt
Fallen.

TRAPDEBUG
Wenn die Option DEBUG_BEFORE_CMD gesetzt ist (wie standardmäßig), ausgeführt vor jedem
Befehl; andernfalls wird er nach jedem Befehl ausgeführt. Siehe die Beschreibung des Falle
eingebaut zshbuiltins(1) für Details zu zusätzlichen Funktionen im Debug
Fallen.

TRAPEXIT
Wird ausgeführt, wenn die Shell beendet wird oder wenn die aktuelle Funktion beendet wird, sofern sie innerhalb definiert ist.
eine Funktion. Der Wert von $? zu Beginn der Ausführung ist der Beendigungsstatus des
Shell oder der Rückgabestatus der beendeten Funktion.

TRAPZERR
Wird ausgeführt, wenn ein Befehl einen Exit-Status ungleich Null hat. Die Funktion ist jedoch
wird nicht ausgeführt, wenn der Befehl in einer Unterliste gefolgt von ` vorkommt.&&' oder `||'; nur
Der letzte Befehl in einer Unterliste dieses Typs führt zur Ausführung des Traps. Der
Funktion TRAPERR wirkt genauso wie TRAPZERR auf Systemen, wo es keine SIGERR
(das ist der Normalfall).

Die Funktionen, die mit ` beginnenTRAP' kann alternativ definiert werden mit dem Falle eingebaut: dies
kann für einige Anwendungen vorzuziehen sein. Das Setzen einer Falle mit einer Form entfernt jede Falle der
andere Form für das gleiche Signal; das Entfernen einer Falle in einer der beiden Formen entfernt alle Fallen für das
gleiches Signal. Die Formen

TRAPNAL() {
# Code
}

('Funktionsfallen') und

Falle '
# Code
' NAL

('Listenfallen') sind in den meisten Punkten gleichwertig, mit folgenden Ausnahmen:

· Funktionsfallen haben alle Eigenschaften normaler Funktionen und erscheinen in der Liste
von Funktionen und werden mit ihrem eigenen Funktionskontext aufgerufen, anstatt mit dem
Kontext, in dem die Falle ausgelöst wurde.

· Der Rückgabestatus von Funktions-Traps ist speziell, während die Rückgabe von einem Listen-Trap
bewirkt, dass der umgebende Kontext mit dem angegebenen Status zurückgegeben wird.

· Funktionsfallen werden in Übereinstimmung mit dem zsh-Verhalten nicht innerhalb von Subshells zurückgesetzt;
Listen-Traps werden gemäß dem POSIX-Verhalten zurückgesetzt.

JOBS


Besitzt das MONITOR Option gesetzt ist, verknüpft eine interaktive Shell eine Job mit jeder Pipeline.
Es führt eine Tabelle der aktuellen Aufträge, gedruckt von der Jobs & Karriere Befehl und weist ihnen kleine
Ganzzahlen. Wenn ein Job asynchron mit ` gestartet wird&', druckt die Shell eine Zeile
zum Standardfehler, der wie folgt aussieht:

[1] 1234

zeigt an, dass der asynchron gestartete Job Job Nummer 1 war und eine hatte
(Top-Level-)Prozess, dessen Prozess-ID 1234 war.

Wenn ein Job mit ` gestartet wird&|' oder `&!', dann wird dieser Job sofort abgelehnt. Nach
Startup, es hat keinen Platz in der Job-Tabelle und unterliegt nicht der Job-Kontrolle
hier beschriebenen Funktionen.

Wenn Sie einen Job ausführen und etwas anderes tun möchten, können Sie die Taste ^Z (Strg-Z) drücken.
das sendet eine TSTP Signal zum aktuellen Job: Dieser Schlüssel kann durch den vermuten
Option der externen stty Befehl. Die Shell zeigt dann normalerweise an, dass der Job
wurde `suspendiert' und gibt eine weitere Eingabeaufforderung aus. Sie können dann den Status dieser
Job, indem er in den Hintergrund gestellt wird, mit dem bg Befehl oder führen Sie einige andere Befehle aus und dann
Bringen Sie den Job schließlich mit dem Vordergrundbefehl wieder in den Vordergrund fg. A ^Z
wird sofort wirksam und ist wie eine Unterbrechung, da ausstehende Ausgaben und ungelesene Eingaben
werden beim Eintippen verworfen.

Ein im Hintergrund ausgeführter Job wird angehalten, wenn er versucht, vom Terminal zu lesen.

Beachten Sie, dass, wenn der im Vordergrund laufende Job eine Shell-Funktion ist, dann das Anhalten
führt dazu, dass sich die Shell verzweigt. Dies ist notwendig, um die
Zustand der Funktion von dem der übergeordneten Shell, die die Jobsteuerung durchführt, so dass die
Letzterer kann zur Eingabeaufforderung zurückkehren. Als Ergebnis, auch wenn fg wird verwendet, um fortzufahren
der Job die Funktion wird nicht mehr Teil der übergeordneten Shell sein, und alle Variablen gesetzt durch
Die Funktion ist in der übergeordneten Shell nicht sichtbar. Daher ist das Verhalten anders
aus dem Fall, in dem die Funktion nie ausgesetzt wurde. Zsh unterscheidet sich von vielen anderen
Muscheln in dieser Hinsicht.

Dasselbe Verhalten tritt auf, wenn die Shell Code ausführt, während die rechte Seite eines
Pipeline oder jede komplexe Shell-Konstruktion wie if, für usw., damit das gesamte
Codeblock kann als einzelner Job verwaltet werden. Hintergrundjobs dürfen normalerweise
Ausgabe erzeugen, aber dies kann durch den Befehl ` deaktiviert werdenstty stoppen'. Wenn Sie
diese tty-Option, dann werden Hintergrundjobs angehalten, wenn sie versuchen, eine Ausgabe wie
Dies tun sie, wenn sie versuchen, Eingaben zu lesen.

Wenn ein Befehl unterbrochen und später mit dem fg or warten Builtins, Zsh-Wiederherstellungen
tty-Modi, die zum Zeitpunkt der Aussetzung aktiv waren. Dies gilt (absichtlich) nicht
wenn der Befehl über ` fortgesetzt wirdtöten -FORTSETZUNG', noch wenn es weitergeht mit bg.

Es gibt verschiedene Möglichkeiten, auf Jobs in der Shell zu verweisen. Auf einen Job kann verwiesen werden
Prozess-ID eines beliebigen Prozesses des Auftrags oder durch eines der folgenden Elemente:

%Anzahl
Der Job mit der angegebenen Nummer.
%Schnur
Jeder Job, dessen Befehlszeile mit beginnt Schnur.
%?Schnur
Jeder Job, dessen Befehlszeile enthält Schnur.
%% Derzeitiger Beruf.
%+ Äquivalent zu `%%'.
%- Vorheriger Job.

Die Shell lernt sofort, wenn ein Prozess seinen Status ändert. Normalerweise informiert es dich
wenn ein Job blockiert wird und kein weiterer Fortschritt möglich ist. Wenn die NOTIFY
Wenn die Option nicht festgelegt ist, wartet das Programm, bis eine Eingabeaufforderung gedruckt wird, bevor Sie informiert werden.
Alle diese Benachrichtigungen werden direkt an das Terminal gesendet, nicht an die Standardausgabe oder
Standart Fehler.

Wenn der Monitormodus aktiviert ist, löst jeder abgeschlossene Hintergrundjob alle Traps aus, die für
KIND.

Wenn Sie versuchen, die Shell zu verlassen, während Jobs ausgeführt werden oder angehalten sind, werden Sie gewarnt
dass Sie (laufende) Jobs ausgesetzt haben. Sie können die Jobs & Karriere Befehl, um zu sehen, was sie
sind. Wenn Sie dies tun oder sofort wieder versuchen, das Programm zu beenden, wird die Shell Sie nicht warnen,
zweites Mal; die angehaltenen Jobs werden beendet und die laufenden Jobs erhalten eine
SEUFZEND Signal, wenn die PHU Option ist gesetzt.

Um zu verhindern, dass die Shell die laufenden Jobs beendet, verwenden Sie entweder die Nohup Befehl (siehe
Nohup(1)) oder die verleugnen eingebaut.

SIGNALE


Die INT und QUIT Signale für einen aufgerufenen Befehl werden ignoriert, wenn dem Befehl folgt
`&' und der MONITOR Option nicht aktiviert ist. Die Shell selbst ignoriert immer die QUIT
Signal. Ansonsten haben Signale die Werte, die die Shell von ihrem übergeordneten Element geerbt hat (aber
finden Sie in der TRAPNAL Sonderfunktionen im Abschnitt „Funktionen“).

Bestimmte Jobs werden von der Shell asynchron ausgeführt, mit Ausnahme der Jobs, die explizit in die
Hintergrund; selbst in Fällen, in denen die Shell normalerweise auf solche Jobs warten würde,
wunsch Befehl oder beenden Sie aufgrund der Option ERR_EXIT führt dazu, dass die Shell beendet wird, ohne
warten. Beispiele für solche asynchronen Jobs sind Prozesssubstitutionen, siehe Abschnitt
PROZESSSUBSTITUTION in der zshexpn(1) Handbuchseite und die Handler-Prozesse für Multios,
siehe Abschnitt MULTIOS im zschmisc(1) Handbuchseite.

ARITHMETIK BEWERTUNG


Die Shell kann Ganzzahl- und Gleitkommaarithmetik durchführen, entweder mit dem eingebauten lassen,
oder durch Ersetzung der Form $((...))Für Ganzzahlen wird die Shell normalerweise kompiliert
8-Byte-Präzision verwenden, sofern verfügbar, andernfalls beträgt die Präzision 4 Byte. Dies kann
getestet werden, zum Beispiel durch den Befehl `drucken - $(( 12345678901 ))'; wenn die Zahl
erscheint unverändert, die Genauigkeit beträgt mindestens 8 Bytes. Gleitkommaarithmetik immer
verwendet den Typ „double“ mit der vom Compiler bereitgestellten entsprechenden Genauigkeit
und die Bibliothek.

Die lassen Der eingebaute Befehl verwendet arithmetische Ausdrücke als Argumente; jeder wird ausgewertet
separat. Da viele der arithmetischen Operatoren sowie Leerzeichen Anführungszeichen erfordern,
Es wird eine alternative Form bereitgestellt: Für jeden Befehl, der mit einem ` beginnt((', alle
Zeichen, bis ein passendes `))' werden als zitierter Ausdruck behandelt und arithmetische
Erweiterung wie für ein Argument von lassen. Genauer gesagt, `((...))' ist äquivalent zu
`lassen "..."'. Der Rückgabewert ist 0, wenn der arithmetische Wert des Ausdrucks
ungleich Null, 1 wenn es Null ist und 2 wenn ein Fehler aufgetreten ist.

Beispielsweise die folgende Anweisung

(( Welle = 2 + 1 ))

entspricht

lassen "val = 2 + 1"

beide weisen der Shell-Variablen den Wert 3 zu Welle und gibt einen Nullstatus zurück.

Ganzzahlen können auch in anderen Basen als 10 vorliegen. Ein führendes `0x' oder `0X' bezeichnet hexadezimal und ein
führende `0b' oder `0B' binär. Ganzzahlen können auch die Form ` habenBase#n', wo Base ist eine
Dezimalzahl zwischen zwei und sechsunddreißig, die die arithmetische Basis darstellt und n ist eine
Zahl in dieser Basis (zum Beispiel `16#ff' ist 255 in Hexadezimal). Die Base# kann auch sein
weggelassen, in diesem Fall wird die Basis 10 verwendet. Aus Gründen der Abwärtskompatibilität wird die Form `[Base]n' ist
auch akzeptiert.

Ein ganzzahliger Ausdruck oder eine Basis in der Form `Base#n' kann Unterstriche enthalten (`_')
nach der führenden Ziffer zur optischen Orientierung; diese werden bei der Berechnung ignoriert. Beispiele
sind 1_000_000 or 0xffff_ffff die gleichbedeutend sind mit 1000000 und 0xffffffff beziehungsweise.

Es ist auch möglich, eine Basis für die Ausgabe in der Form ` anzugeben.[#Base]', für
Beispiel `[# 16]'. Dies wird bei der Ausgabe arithmetischer Substitutionen oder bei
Zuweisung an skalare Parameter, sondern eine explizit definierte Ganzzahl oder Gleitkommazahl
Parameter wird nicht beeinflusst. Wenn eine Integer-Variable implizit durch einen
arithmetischer Ausdruck, jede auf diese Weise angegebene Basis wird als Ausgabe der Variablen festgelegt
arithmetische Basis, als ob die Option `-i Base' zum setzen builtin verwendet wurde. Die
Ausdruck hat keinen Vorrang und wenn er mehr als einmal in einem mathematischen Ausdruck vorkommt,
wird das zuletzt gefundene verwendet. Aus Gründen der Übersichtlichkeit wird empfohlen, es am
Anfang eines Ausdrucks. Als Beispiel:

setzen -i 16 y
drucken $(( [# 8] x = 32, y = 32 ))
drucken $x $y

gibt zuerst aus `8 # 40', der am weitesten rechts stehende Wert in der gegebenen Ausgabebasis und dann `8 # 40 16 # 20',
weil y wurde explizit mit einer Ausgabebasis von 16 deklariert, während x (vorausgesetzt, es tut
noch nicht vorhanden) wird implizit durch die arithmetische Auswertung typisiert und erhält dort die
Ausgabebasis 8.

Die Base kann durch einen Unterstrich ersetzt oder gefolgt werden, der wiederum von einem
positive Ganzzahl (wenn sie fehlt, wird der Wert 3 verwendet). Dies zeigt an, dass Unterstriche
sollte in die Ausgabezeichenfolge eingefügt werden, wobei die Nummer zur optischen Übersichtlichkeit gruppiert wird. Die
Die folgende Ganzzahl gibt die Anzahl der zu gruppierenden Ziffern an. Beispiel:

setopt cbases
drucken $(( [#16_4] 65536 ** 2 ))

Ausgänge `0x1_0000_0000'.

Die Funktion kann mit Gleitkommazahlen verwendet werden. In diesem Fall muss die Basis
weggelassen; die Gruppierung erfolgt vom Dezimalpunkt weg. Zum Beispiel:

zmodload zsh/mathfunc
drucken $(( [#_] sqrt(1e7) ))

Ausgänge `3_162.277_660_168_379_5' (die Anzahl der angezeigten Dezimalstellen kann variieren).

Besitzt das C_BASEN Wenn diese Option aktiviert ist, werden Hexadezimalzahlen im Standard-C-Format ausgegeben, z. B.
Beispiel `0xFF' anstelle des üblichen `16#FF'. Wenn die Option OCTAL_ZEROES ist auch eingestellt (es
ist nicht standardmäßig), Oktalzahlen werden ähnlich behandelt und erscheinen daher als `077'
anstelle von `8 # 77'. Diese Option hat keinen Einfluss auf die Ausgabe anderer Basen als
Hexadezimal und Oktal, und diese Formate werden bei der Eingabe immer verstanden.

Wenn eine Ausgabebasis mit ` angegeben wird[#Base]' Syntax, ein entsprechendes Basispräfix
wird bei Bedarf ausgegeben, so dass der ausgegebene Wert eine gültige Syntax für die Eingabe ist. Wenn die #
wird verdoppelt, zum Beispiel `[##16]', dann wird kein Basispräfix ausgegeben.

Gleitkommakonstanten erkennt man am Vorhandensein eines Dezimalpunkts oder eines Exponenten.
Der Dezimalpunkt kann das erste Zeichen der Konstanten sein, aber das Exponentenzeichen e
or E nicht, da es als Parametername verwendet wird. Alle numerischen Teile (vor und
nach dem Dezimalpunkt und im Exponenten) dürfen Unterstriche nach dem führenden
Ziffer zur optischen Orientierung; diese werden bei der Berechnung ignoriert.

Ein arithmetischer Ausdruck verwendet nahezu dieselbe Syntax und Assoziativität von Ausdrücken wie
in C.

Im nativen Betriebsmodus werden die folgenden Operatoren unterstützt (aufgelistet in
absteigende Rangfolge):

+ - ! ~ ++ --
unäres Plus/Minus, logisches NICHT, Komplement, {pre,post}{in,de}crement
<< >> bitweise Verschiebung nach links, rechts
& bitweises UND
^ bitweises XOR
| bitweise ODER
** Potenzierung
* / % Multiplikation, Division, Modul (Rest)
+ - Addition Subtraktion
< > <= >=
Vergleich
== != Gleichheit und Ungleichheit
&& logisches UND
|| ^^ logisches ODER, XOR
? : ternärer Operator
= += -= *= /= %= &= ^= |= << = >> = && = || = ^^= **=
Zuordnung
, Komma-Operator

Die Operatoren `&&', `||', `&& =' und `|| =' sind kurzgeschlossen, und nur einer der
Die letzten beiden Ausdrücke werden in einem ternären Operator ausgewertet. Beachten Sie die Priorität des
bitweise UND-, ODER- und XOR-Operatoren.

Mit der Option C_PRECEDENCES die Präzedenzfälle (aber keine anderen Eigenschaften) der Operatoren
werden so geändert, dass sie mit denen in den meisten anderen Sprachen übereinstimmen, die die entsprechenden
Betreiber:

+ - ! ~ ++ --
unäres Plus/Minus, logisches NICHT, Komplement, {pre,post}{in,de}crement
** Potenzierung
* / % Multiplikation, Division, Modul (Rest)
+ - Addition Subtraktion
<< >> bitweise Verschiebung nach links, rechts
< > <= >=
Vergleich
== != Gleichheit und Ungleichheit
& bitweises UND
^ bitweises XOR
| bitweise ODER
&& logisches UND
^^ logisches XOR
|| logisches ODER
? : ternärer Operator
= += -= *= /= %= &= ^= |= << = >> = && = || = ^^= **=
Zuordnung
, Komma-Operator

Beachten Sie, dass die Potenzierung in beiden Fällen Vorrang vor der unären Operatoren hat.
daher `-3**2' wird als ` ausgewertet.9', nicht `-9'. Verwenden Sie Klammern, wo nötig: `-(3**2)'.
Dies dient der Kompatibilität mit anderen Shells.

Mathematische Funktionen können mit der Syntax ` aufgerufen werden.Funkt(args)', wobei die Funktion
entscheidet, ob die args wird als Zeichenfolge oder durch Kommas getrennte Liste arithmetischer
Ausdrücke. Die Shell definiert derzeit standardmäßig keine mathematischen Funktionen, aber die
Modulen zsh/mathfunc kann geladen werden mit dem zmodload eingebaut, um Standard-Floating bereitzustellen
Punktmathematische Funktionen.

Ein Ausdruck der Form „##x' wo x ist eine beliebige Zeichenfolge wie `a', `^A', oder
`\M-\Cx' gibt den Wert dieses Zeichens und einen Ausdruck der Form `#Name' gibt
der Wert des ersten Zeichens des Parameterinhalts Name. Zeichenwerte
entsprechen dem Zeichensatz, der im aktuellen Gebietsschema verwendet wird; für Mehrbyte-Zeichen
Handhabung der Option MULTIBYTE muss gesetzt werden. Beachten Sie, dass sich dieses Formular von
`$#Name', eine Standardparametersubstitution, die die Länge des Parameters angibt Name.
`#\' wird anstelle von ` akzeptiert.##', aber seine Verwendung ist veraltet.

Benannte Parameter und indizierte Arrays können innerhalb einer Arithmetikoperation mit Namen referenziert werden.
Ausdruck ohne Verwendung der Parametererweiterungssyntax. Beispiel:

((val2 = val1 * 2))

weist den doppelten Wert von $val1 zum Parameter mit dem Namen val2.

Eine interne Ganzzahldarstellung eines benannten Parameters kann mit dem ganze Zahl
eingebaut. Die arithmetische Auswertung erfolgt für den Wert jeder Zuweisung an einen benannten
Parameter, der auf diese Weise als Integer deklariert wurde. Die Zuweisung einer Gleitkommazahl zu einem
Ganzzahl führt zum Abrunden auf die nächste Ganzzahl.

Ebenso können Gleitkommazahlen mit dem schweben eingebaut; es gibt zwei
Typen, die sich nur im Ausgabeformat unterscheiden, wie für die setzen eingebaut. Die
Das Ausgabeformat kann umgangen werden, indem anstelle des Parameters eine arithmetische Substitution verwendet wird
Substitution, dh `${schweben}' verwendet das definierte Format, aber `$((schweben))' verwendet einen generischen
Gleitkommaformat.

Bei Bedarf werden Ganzzahlen in Gleitkommawerte umgewandelt. Darüber hinaus
wenn ein Operator, der eine Ganzzahl erfordert (`~', `&', `|', `^', `%', `<<', `>>' und ihre
Äquivalente mit Zuweisung) wird ein Gleitkomma-Argument übergeben, es wird stillschweigend
auf die nächste Ganzzahl abgerundet.

Benutzer sollten sich darüber im Klaren sein, dass, wie bei vielen anderen Programmiersprachen, aber nicht bei Software
Für Berechnungen konzipiert, erfolgt die Auswertung eines Ausdrucks in zsh Term für Term
und die Umwandlung von Ganzzahlen in Gleitkommazahlen erfolgt nicht in Termen, die nur
Ganzzahlen. Ein typisches Ergebnis davon ist, dass eine Division wie 6/8 ist gekürzt, in diesem
auf 0 abgerundet. Die FORCE_FLOAT Shell-Option kann in Skripten oder Funktionen verwendet werden
wo durchgehend eine Gleitkommaauswertung erforderlich ist.

Skalare Variablen können zu verschiedenen Zeitpunkten Ganzzahl- oder Gleitkommawerte enthalten; es gibt keine
Speicher des numerischen Typs in diesem Fall.

Wenn eine Variable zum ersten Mal in einem numerischen Kontext zugewiesen wird, ohne vorher deklariert zu sein,
wird implizit typisiert als ganze Zahl or schweben und behalten Sie diesen Typ bei, bis der Typ
explizit geändert oder bis zum Ende des Gültigkeitsbereichs. Dies kann unvorhergesehene Folgen haben.
Zum Beispiel in der Schleife

für (( f = 0; f < 1; f += 0.1 )); do
# - $f
erledigt

if f noch nicht deklariert wurde, wird es bei der ersten Zuweisung als
Ganzzahl und folglich die Operation `f += 0.1' führt immer dazu, dass das Ergebnis
auf Null gekürzt, so dass die Schleife fehlschlägt. Eine einfache Lösung wäre, die
Initialisierung in `f = 0.0'. Daher ist es am besten, numerische Variablen mit
explizite Typen.

BEDINGT AUSDRÜCKE


A bedingt Ausdruck wird mit dem verwendet [[ zusammengesetzter Befehl zum Testen von Dateiattributen
und zum Vergleichen von Zeichenfolgen. Jeder Ausdruck kann aus einem oder mehreren der
folgende unäre oder binäre Ausdrücke:

-a Datei
wahr, wenn Datei besteht.

-b Datei
wahr, wenn Datei existiert und ist eine Block-Spezialdatei.

-c Datei
wahr, wenn Datei existiert und ist eine spezielle Zeichendatei.

-d Datei
wahr, wenn Datei existiert und ist ein Verzeichnis.

-e Datei
wahr, wenn Datei besteht.

-f Datei
wahr, wenn Datei existiert und ist eine normale Datei.

-g Datei
wahr, wenn Datei existiert und sein Setgid-Bit ist gesetzt.

-h Datei
wahr, wenn Datei existiert und ist ein symbolischer Link.

-k Datei
wahr, wenn Datei existiert und sein Sticky-Bit ist gesetzt.

-n Schnur
wahr, wenn Länge von Schnur ist nicht Null.

-o ganz ohne irgendetwas tun oder drücken zu müssen.
true, wenn die Option benannt ist ganz ohne irgendetwas tun oder drücken zu müssen. ist eingeschaltet. ganz ohne irgendetwas tun oder drücken zu müssen. kann ein einzelnes Zeichen sein. In diesem Fall
es handelt sich um einen einstelligen Optionsnamen. (Siehe Abschnitt „Optionen angeben“.)

-p Datei
wahr, wenn Datei existiert und ist eine FIFO-Sonderdatei (Named Pipe).

-r Datei
wahr, wenn Datei existiert und kann vom aktuellen Prozess gelesen werden.

-s Datei
wahr, wenn Datei existiert und hat eine Größe größer als Null.

-t fd true, wenn Dateideskriptornummer fd ist geöffnet und mit einem Endgerät verknüpft.
(Hinweis: fd ist nicht optional)

-u Datei
wahr, wenn Datei existiert und sein Setuid-Bit ist gesetzt.

-w Datei
wahr, wenn Datei existiert und ist vom aktuellen Prozess beschreibbar.

-x Datei
wahr, wenn Datei existiert und kann vom aktuellen Prozess ausgeführt werden. Wenn Datei existiert und ist ein
Verzeichnis, dann hat der aktuelle Prozess die Berechtigung, im Verzeichnis zu suchen.

-z Schnur
wahr, wenn Länge von Schnur ist null.

-L Datei
wahr, wenn Datei existiert und ist ein symbolischer Link.

-O Datei
wahr, wenn Datei existiert und ist Eigentum der effektiven Benutzer-ID dieses Prozesses.

-G Datei
wahr, wenn Datei existiert und seine Gruppe stimmt mit der effektiven Gruppen-ID dieses Prozesses überein.

-S Datei
wahr, wenn Datei existiert und ist eine Steckdose.

-N Datei
wahr, wenn Datei existiert und sein Zugriffszeitpunkt nicht neuer ist als sein Änderungszeitpunkt.

file1 -nt file2
wahr, wenn file1 existiert und ist neuer als file2.

file1 -ot file2
wahr, wenn file1 existiert und ist älter als file2.

file1 -wenn file2
wahr, wenn file1 und file2 existieren und auf dieselbe Datei verweisen.

Schnur = Anleitungen
Schnur == Anleitungen
wahr, wenn Schnur Streichhölzer Anleitungen. Das `==Die Form `` ist die bevorzugte. Die ``=' bilden
dient der Abwärtskompatibilität und sollte als veraltet betrachtet werden.

Schnur != Anleitungen
wahr, wenn Schnur stimmt nicht überein Anleitungen.

Schnur =~ regexp
wahr, wenn Schnur entspricht dem regulären Ausdruck regexp. Wenn die Option RE_MATCH_PCRE
eingestellt ist regexp wird als PCRE-regulärer Ausdruck getestet unter Verwendung des zsh/pcre Modul,
andernfalls wird es als erweiterter regulärer POSIX-Ausdruck getestet, unter Verwendung des zsh/regex
Modul. Bei erfolgreicher Übereinstimmung werden einige Variablen aktualisiert; es werden keine Variablen
geändert, wenn der Abgleich fehlschlägt.

Wenn die Option BASH_REMATCH ist der Skalarparameter nicht gesetzt PASSEN ZU wird auf die eingestellte
Teilzeichenfolge, die dem Muster und den ganzzahligen Parametern entspricht MBEGIN und HEILEN zu
den Index des Beginns bzw. Endes des Spiels in Schnur, so dass wenn
Schnur ist in der Variable enthalten jung der Ausdruck `${var[$MBEGIN,$MEND]}' ist
identisch mit `$MATCH'. Die Einstellung der Option KSH_ARRAYS wird respektiert.
Ebenso das Array Spiel wird auf die Teilzeichenfolgen gesetzt, die in Klammern übereinstimmen
Unterausdrücke und die Arrays mbegin und flicken zu den Indizes des Start- und End
Positionen bzw. der Teilstrings innerhalb SchnurDie Arrays sind nicht gesetzt
wenn es keine eingeklammerten Teilausdrücke gäbe. Wenn zum Beispiel die Zeichenfolge `a
kurz Schnur' wird mit dem regulären Ausdruck ` abgeglichens(...)t', dann (unter der Annahme
die Option KSH_ARRAYS ist nicht gesetzt) PASSEN ZU, MBEGIN und HEILEN sind `kurz', 3 und 7,
bzw. während Spiel, mbegin und flicken sind Arrays mit einem Eintrag, die die
Zeichenfolgen `hor', `4' und `6', bzw.

Wenn die Option BASH_REMATCH wird das Array gesetzt BASH_REMATCH wird auf die Teilzeichenfolge gesetzt
das dem Muster entsprach, gefolgt von den Teilzeichenfolgen, die in Klammern übereinstimmten
Unterausdrücke innerhalb des Musters.

string1 < string2
wahr, wenn string1 kommt davor string2 basierend auf dem ASCII-Wert ihrer Zeichen.

string1 > string2
wahr, wenn string1 Kommt danach string2 basierend auf dem ASCII-Wert ihrer Zeichen.

exp1 -Gl exp2
wahr, wenn exp1 ist numerisch gleich exp2. Beachten Sie, dass für rein numerische
Vergleiche Verwendung der ((...)) Builtin, beschrieben im Abschnitt `ARITHMETIC
EVALUATION‘ ist bequemer als bedingte Ausdrücke.

exp1 -ne exp2
wahr, wenn exp1 ist numerisch ungleich exp2.

exp1 -L- exp2
wahr, wenn exp1 ist zahlenmäßig kleiner als exp2.

exp1 -GT exp2
wahr, wenn exp1 ist numerisch größer als exp2.

exp1 Le- exp2
wahr, wenn exp1 ist numerisch kleiner oder gleich exp2.

exp1 -geben Sie exp2
wahr, wenn exp1 ist numerisch größer oder gleich exp2.

( exp )
wahr, wenn exp ist wahr.

! exp wahr, wenn exp ist falsch.

exp1 && exp2
wahr, wenn exp1 und exp2 sind beide wahr.

exp1 || exp2
wahr, wenn entweder exp1 or exp2 ist wahr.

Aus Kompatibilitätsgründen gilt: Wenn ein einzelnes Argument syntaktisch nicht bedeutsam ist,
Normalerweise handelt es sich dabei um eine Variable. Die Bedingung wird als Test dafür behandelt, ob der Ausdruck
wird als Zeichenfolge mit einer Länge ungleich Null erweitert. Mit anderen Worten: [[ $ var ]] ist die gleiche wie [[ -n
$ var ]]Es wird empfohlen, wenn möglich die zweite, explizite Form zu verwenden.

Die normale Shell-Erweiterung erfolgt auf der Datei, Schnur und Anleitungen Argumente, aber die
Das Ergebnis jeder Erweiterung ist auf ein einzelnes Wort beschränkt, ähnlich wie bei
Anführungszeichen.

Die Dateinamengenerierung wird nicht für alle Argumente zu Bedingungen durchgeführt. Es
kann in jedem Fall erzwungen werden, in dem die normale Shell-Erweiterung gültig ist und wenn die Option
EXTENDED_GLOB ist wirksam durch die Verwendung eines expliziten Glob-Qualifizierers der Form (#Q) Am Ende
der Zeichenfolge. Ein normaler Glob-Qualifiziererausdruck kann zwischen dem `q' und der
schließende Klammer; wenn keine erscheint, hat der Ausdruck keine Auswirkung, außer dass der Dateiname
Generierung. Die Ergebnisse der Dateinamengenerierung werden zu einem einzigen Wort zusammengefügt,
wie bei den Ergebnissen anderer Expansionsformen.

Diese spezielle Verwendung der Dateinamengenerierung ist nur verfügbar mit dem [[ Syntax. Wenn die
Zustand eintritt innerhalb der [ or Test eingebauten Befehlen, dann erfolgt Globbing stattdessen als
Teil der normalen Befehlszeilenerweiterung, bevor die Bedingung ausgewertet wird. In diesem Fall
kann mehrere Wörter generieren, die die Syntax des Testbefehls wahrscheinlich durcheinanderbringen.

Zum Beispiel,

[[ -n Datei*(#qN) ]]

erzeugt den Status Null genau dann, wenn sich mindestens eine Datei im aktuellen Verzeichnis befindet
beginnend mit der Zeichenfolge `Datei'. Der Globbing-Qualifikator N stellt sicher, dass der Ausdruck
leer, wenn keine passende Datei vorhanden ist.

Mustermetazeichen sind aktiv für die Anleitungen Argumente; die Muster sind die gleichen wie
Die zur Generierung von Dateinamen verwendeten zshexpn(1), aber es gibt kein besonderes Verhalten von
`/' noch Anfangspunkte und keine Glob-Qualifizierer sind zulässig.

In jedem der obigen Ausdrücke gilt: if Datei hat die Form `/dev/fd/n', wo n ist ein
Ganzzahl, dann wird der Test auf die geöffnete Datei angewendet, deren Deskriptornummer ist n, auch wenn die
Das zugrunde liegende System unterstützt nicht die /dev/fd Verzeichnis.

In den Formen, die numerische Vergleiche durchführen, sind die Ausdrücke exp arithmetische Erweiterung durchführen
als wären sie eingeschlossen in $((...)).

Beispielsweise Folgendes:

[[ ( -f foo || -f Bar ) && $Bericht = y* ]] && drucken Reichen Sie das besteht.

prüft, ob eine der Dateien foo oder Datei Bar existiert, und wenn ja, wenn der Wert des Parameters
berichten beginnt mit `y'; wenn die vollständige Bedingung erfüllt ist, wird die Meldung `Reichen Sie das besteht.' ist
gedruckt.

ERWEITERUNG OF PROMPT SEQUENZEN


Promptsequenzen erfahren eine besondere Form der Expansion. Diese Art der Expansion ist auch
verfügbar über die -P Option zum drucken eingebaut.

Besitzt das PROMPT_SUBST Wenn diese Option aktiviert ist, wird die Eingabeaufforderung zunächst Parameter
Expansion, Befehl Substitution und Arithmetik Expansion. Sehen zshexpn(1).

Bestimmte Escape-Sequenzen können in der Eingabeaufforderungszeichenfolge erkannt werden.

Besitzt das PROMPT_BANG Option gesetzt ist, wird ein `!' in der Eingabeaufforderung wird durch den aktuellen Verlauf ersetzt
Ereignisnummer. Ein Literal `!' kann dann dargestellt werden als `!!'.

Besitzt das PROMPT_PERCENT Option gesetzt ist, bestimmte Escape-Sequenzen, die mit ` beginnen%' sind
erweitert. Viele Escapezeichen werden von einem einzelnen Zeichen gefolgt, obwohl einige davon eine
optionales ganzzahliges Argument, das zwischen den `%' und das nächste Zeichen der
Sequenz. Es stehen kompliziertere Escape-Sequenzen zur Verfügung, um bedingte
Erweiterung.

Schlicht PROMPT FLUCHT


Spezial Zeichen
%% Ein `%'.

%) Ein `)'.

Anmelden Information
%l Die Leitung (tty), über die der Benutzer angemeldet ist, ohne `/ Dev /' Präfix. Wenn der Name
beginnt mit `/dev/tty', wird dieses Präfix entfernt.

%M Der vollständige Hostname der Maschine.

%m Der Hostname bis zum ersten „.'. Auf das ` kann eine Ganzzahl folgen.%', um anzugeben, wie
viele Komponenten des Hostnamens erwünscht sind. Bei einer negativen Ganzzahl, nachgestellten
Komponenten des Hostnamens werden angezeigt.

%n $USERNAME.

%y Die Leitung (tty), über die der Benutzer angemeldet ist, ohne `/ Dev /' Präfix. Dies
behandeln `/dev/tty' Namen speziell.

Schale Zustand
%# Ein `#' wenn die Shell mit Privilegien läuft, ein `%' wenn nicht. Äquivalent zu
`%(!.#.%%)Die Definition von „privilegiert“ für diese Zwecke ist, dass entweder
die effektive Benutzer-ID Null ist, oder, falls POSIX.1e-Funktionen unterstützt werden, dass bei
mindestens eine Fähigkeit wird entweder in der Effektiven oder Vererbbaren Fähigkeit ausgelöst
Vektoren.

%? Der Rückgabestatus des letzten Befehls, der unmittelbar vor der Eingabeaufforderung ausgeführt wurde.

%_ Der Status des Parsers, also der Shell-Konstrukte (wie `if' und `für '), die haben
wurde auf der Kommandozeile gestartet. Wenn eine Ganzzahl angegeben wird, werden so viele Strings
gedruckt werden; Null oder negative oder keine Ganzzahl bedeutet, so viele wie möglich zu drucken. Dies
ist am nützlichsten in Eingabeaufforderungen PS2 für Fortsetzungszeilen und PS4 zum Debuggen mit dem
XTRACE Option; im letzteren Fall funktioniert es auch nicht-interaktiv.

%^ Der Status des Parsers in umgekehrter Reihenfolge. Dies ist dasselbe wie `%_' außer der Reihenfolge
von Saiten. Es wird oft verwendet in RPS2.

%d
%/ Aktuelles Arbeitsverzeichnis. Wenn auf ` eine Ganzzahl folgt%', es gibt eine Anzahl von
die nachgestellten Komponenten des aktuellen Arbeitsverzeichnisses, die angezeigt werden sollen; Null bedeutet, dass das ganze
Pfad. Eine negative Ganzzahl gibt führende Komponenten an, d. h. %-1d spezifiziert das
erste Komponente.

%~ As %d und %/, aber wenn das aktuelle Arbeitsverzeichnis mit beginnt $ HOME, dieser Teil ist
ersetzt durch ein `~'. Wenn es außerdem ein benanntes Verzeichnis als Präfix hat,
Teil wird durch ein ` ersetzt~' gefolgt vom Namen des Verzeichnisses, aber nur, wenn die
Das Ergebnis ist kürzer als der vollständige Pfad; siehe Dynamisch und Statisch namens Verzeichnisse in
zshexpn(1).

%e Auswertungstiefe der aktuellen Quelldatei, Shell-Funktion oder eval. Dies ist
jedes Mal erhöht oder verringert, wenn der Wert von %N wird auf einen
vorherigen Wert. Dies ist besonders nützlich für das Debuggen im Rahmen von $PS4.

%h
%! Aktuelle Verlaufsereignisnummer.

%i Die Zeilennummer, die aktuell im Skript, der Quelldatei oder der Shell ausgeführt wird
Funktion gegeben durch %NDies ist besonders nützlich für das Debuggen im Rahmen von $PS4.

%I Die Zeilennummer, die derzeit in der Datei ausgeführt wird %xDies ist ähnlich wie %i,
aber die Zeilennummer ist immer eine Zeilennummer in der Datei, in der der Code definiert wurde,
auch wenn der Code eine Shell-Funktion ist.

%j Die Anzahl der Arbeitsplätze.

%L Der aktuelle Wert von $SHLVL.

%N Der Name des Skripts, der Quelldatei oder der Shell-Funktion, die zsh derzeit
ausgeführt wird, je nachdem, was zuletzt gestartet wurde. Wenn es keine gibt, ist dies
entspricht dem Parameter $0. Auf das `` kann eine Ganzzahl folgen.%' um eine Zahl anzugeben
der anzuzeigenden Pfadkomponenten; Null bedeutet den vollständigen Pfad. Eine negative Ganzzahl
gibt führende Komponenten an.

%x Der Name der Datei, die den aktuell ausgeführten Quellcode enthält.
verhält sich wie %N außer dass Funktions- und Eval-Befehlsnamen nicht angezeigt werden, stattdessen
die Datei, in der sie definiert wurden.

%c
%.
%C Nachfolgende Komponente des aktuellen Arbeitsverzeichnisses. Dem ` kann eine Ganzzahl folgen.%'
um mehr als eine Komponente zu erhalten. Es sei denn `%C' wird verwendet, Tilde-Kontraktion ist
zuerst ausgeführt. Diese sind veraltet, da %c und %C sind äquivalent zu %1~ und %1/,
während explizite positive Ganzzahlen den gleichen Effekt haben wie für die
letzten beiden Sequenzen.

Datum und Zeit
%D Das Datum in yy-mm-dd Format.

%T Aktuelle Tageszeit im 24-Stunden-Format.

%t
%@ Aktuelle Tageszeit im 12-Stunden-Format am/pm.

%* Aktuelle Tageszeit im 24-Stunden-Format mit Sekundenangabe.

%w Das Datum in Tag-dd Format.

%W Das Datum in mm/dd/yy Format.

%D{Schnur}
Schnur ist formatiert mit dem strftime Funktion. Sehen strftime(3) für weitere Details.
Verschiedene zsh-Erweiterungen stellen Zahlen ohne führende Null oder Leerzeichen bereit, wenn die Zahl
ist eine einzelne Ziffer:

%f ein Tag im Monat
%K die Stunde des Tages auf der 24-Stunden-Uhr
%L die Stunde des Tages auf der 12-Stunden-Uhr

Wenn das System außerdem das POSIX-System unterstützt, Gettimeofday Systemaufruf, %. unterstützt
Dezimalbruchteile einer Sekunde seit der Epoche mit führenden Nullen. Standardmäßig
Es sind drei Dezimalstellen vorgesehen, es können jedoch bis zu 6 Ziffern angegeben werden
nach dem %; somit % 6. gibt Mikrosekunden aus. Ein typisches Beispiel hierfür ist die
Format `%D{%H:%M:%S.%.}'.

Die GNU-Erweiterung, die ein `-' zwischen den % und das Formatzeichen bewirkt eine
Das Entfernen von führenden Nullen oder Leerzeichen wird direkt von der Shell für die
Formatzeichen d, f, H, k, l, m, M, S und y; alle anderen Formatzeichen sind
bereitgestellt an das System strftime(3) mit einem beliebigen führenden `-' vorhanden, so dass die Handhabung
ist systemabhängig. Weitere GNU (oder andere) Erweiterungen werden ebenfalls an
strftime(3) und können funktionieren, wenn das System sie unterstützt.

visuell Effekten
%B (%b)
Fettdruckmodus starten (stoppen).

%E Bis zum Zeilenende löschen.

%U (%u)
Unterstreichungsmodus starten (stoppen).

%S (%s)
Standout-Modus starten (stoppen).

%F (%f)
Starten (Stoppen) Sie mit einer anderen Vordergrundfarbe, sofern dies vom Terminal unterstützt wird.
Die Farbe kann auf zwei Arten angegeben werden: entweder als numerisches Argument, als normales oder
durch eine Sequenz in Klammern nach dem %FBeispielsweise %F{rot}Im letzteren Fall
Die zulässigen Werte sind wie für die fg zle_highlight Attribut; siehe
Charakter Hervorhebung in zshzle(1). Das bedeutet, dass numerische Farben erlaubt sind
auch im zweiten Format.

%K (%k)
Start (Stopp) mit einer anderen Hintergrundfarbe. Die Syntax ist identisch mit der
für %F und %f.

%{...%}
Fügen Sie eine Zeichenfolge als Escape-Sequenz ein. Die Zeichenfolge in den Klammern sollte
ändert die Cursorposition nicht. Klammerpaare können verschachtelt werden.

Ein positives numerisches Argument zwischen dem % und den { wird behandelt wie beschrieben für %G
unten mit.

%G Innerhalb eines %{...%} Sequenz, einen „Glitch“ enthalten: das heißt, davon ausgehen, dass eine einzelne
Zeichenbreite ausgegeben wird. Dies ist nützlich bei der Ausgabe von Zeichen, die
andernfalls kann die Shell sie nicht korrekt verarbeiten, wie z. B. das alternative Zeichen
auf einigen Terminals eingestellt. Die betreffenden Zeichen können innerhalb eines %{...%}
Sequenz zusammen mit der entsprechenden Anzahl von %G Sequenzen zur Anzeige der
richtige Breite. Eine Ganzzahl zwischen `%' und `G' gibt eine Zeichenbreite an
anders als eins. Daher %{ff%2G%} Ausgänge ff und geht davon aus, dass es die Breite von
zwei Standardzeichen.

Mehrfachverwendung von %G akkumulieren auf offensichtliche Weise; die Position des %G is
unwichtig. Negative Ganzzahlen werden nicht verarbeitet.

Beachten Sie, dass es bei der Verwendung der sofortigen Kürzung ratsam ist, die Ausgabe in
einzelne Zeichen innerhalb jedes %{...%} Gruppe, so dass der richtige Abschneidepunkt
kann gefunden werden.

BEDINGT TEILZEICHENFOLGEN IN AUFFORDERUNGEN


%v Der Wert des ersten Elements der psvar Array-Parameter. Nach dem `%'
mit einer Ganzzahl ergibt das Element des Arrays. Negative Ganzzahlen zählen vom
Ende des Arrays.

%(x.wahrer Text.falscher Text)
Gibt einen ternären Ausdruck an. Das Zeichen nach dem x ist willkürlich; die
Dasselbe Zeichen wird verwendet, um den Text für das „wahre“ Ergebnis von dem für das
`falsches' Ergebnis. Dieses Trennzeichen darf nicht in der wahrer Text, außer als Teil von
eine %-Escape-Sequenz. Ein `)' kann erscheinen in der falscher Text als `%)'. wahrer Text und
falscher Text können beide beliebig verschachtelte Escape-Sequenzen enthalten, einschließlich weiterer
ternäre Ausdrücke.

Der linken Klammer kann eine positive Ganzzahl vorangestellt oder nachgestellt werden. n, Die
ist standardmäßig Null. Eine negative Ganzzahl wird mit -1 multipliziert, sofern nicht anders angegeben
unten für `l'. Das Testzeichen x kann einer der folgenden sein:

! Wahr, wenn die Shell mit Berechtigungen ausgeführt wird.
# Wahr, wenn die effektive UID des aktuellen Prozesses ist n.
? Wahr, wenn der Beendigungsstatus des letzten Befehls war n.
_ Wahr, wenn mindestens n Es wurde mit dem Bau von Schalenkonstruktionen begonnen.
C
/ Wahr, wenn der aktuelle absolute Pfad mindestens n Elemente im Verhältnis zu den
Stammverzeichnis, daher / wird als 0 Elemente gezählt.
c
.
~ Wahr, wenn der aktuelle Pfad mit Präfix-Ersetzung mindestens n Elemente
relativ zum Stammverzeichnis, daher / wird als 0 Elemente gezählt.
D Wahr, wenn der Monat gleich ist n (Januar = 0).
d Wahr, wenn der Tag des Monats gleich ist n.
e Wahr, wenn die Auswertungstiefe mindestens n.
g Wahr, wenn die effektive GID des aktuellen Prozesses ist n.
j Wahr, wenn die Anzahl der Jobs mindestens n.
L Stimmt, wenn die SHLVL Parameter ist mindestens n.
l Wahr, wenn mindestens n In der aktuellen Zeile wurden bereits Zeichen gedruckt.
Wann n ist negativ, wahr, wenn mindestens abs(n) Zeichen bleiben vor dem
gegenüberliegenden Rand (also der linke Rand für PRAKTISCH).
S Stimmt, wenn die SECONDS Parameter ist mindestens n.
T Wahr, wenn die Zeit in Stunden gleich ist n.
t Wahr, wenn die Zeit in Minuten gleich ist n.
v Wahr, wenn das Array psvar hat mindestens n Elemente.
V Wahr, wenn Element n des Arrays psvar ist festgelegt und nicht leer.
w Wahr, wenn der Wochentag gleich ist n (Sonntag = 0).

%<Schnur<
%>Schnur>
%[xstring]
Gibt das Kürzungsverhalten für den Rest der Eingabeaufforderung an. Der dritte,
veraltet, Form ist gleichbedeutend mit `%xstringx', d. h x kann sein `<' oder `>'. Das
Schnur wird anstelle des gekürzten Teils einer Zeichenfolge angezeigt. Beachten Sie dies
wird nicht zeitnah erweitert.

Das numerische Argument, das in der dritten Form unmittelbar nach dem `[',
gibt die maximal zulässige Länge der verschiedenen Zeichenfolgen an, die angezeigt werden können
in der Eingabeaufforderung. In den ersten beiden Formen kann dieses numerische Argument negativ sein, in
In diesem Fall wird die Kürzungslänge durch Subtraktion des Absolutwerts von
das numerische Argument aus der Anzahl der verbleibenden Zeichenpositionen auf dem
aktuellen Eingabeaufforderungszeile. Wenn dies eine Null oder eine negative Länge ergibt, wird eine Länge von 1
verwendet wird. Mit anderen Worten, ein negatives Argument bewirkt, dass nach der Kürzung bei
am wenigsten n Zeichen bleiben vor dem rechten Rand (linker Rand für PRAKTISCH).

Die Formen mit `<' links von der Zeichenfolge abschneiden, und die Formen mit `>'
rechts von der Zeichenfolge abschneiden. Wenn das aktuelle Verzeichnis beispielsweise
`/home/hecht', die Eingabeaufforderung `%8<..<%/' wird erweitert zu `..e/Hecht'. In dieser Zeichenfolge ist die
Abschlusszeichen (`<', `>' oder `]'), oder eigentlich jedes Zeichen, kann zitiert werden durch
ein vorangestelltes `\'; Hinweis bei der Verwendung drucken -P, dass dies jedoch verdoppelt werden muss, da
Die Saite unterliegt außerdem den Standard drucken Verarbeitung, zusätzlich zu allen
Backslashes durch eine Zeichenfolge in doppelten Anführungszeichen entfernt: Der schlimmste Fall ist daher `drucken
-P "%<\\\\<<…"'.

Besitzt das Schnur länger als die angegebene Kürzungslänge ist, erscheint es in
vollständig, wobei die abgeschnittene Zeichenfolge vollständig ersetzt wird.

Der abzuschneidende Teil der Eingabeaufforderungszeichenfolge reicht bis zum Ende der Zeichenfolge oder bis
das Ende der nächsten umschließenden Gruppe des `%(' Konstrukt oder zum nächsten
Kürzungen auf der gleichen Gruppierungsebene (also Kürzungen innerhalb einer `%('
sind getrennt), je nachdem, was zuerst eintritt. Insbesondere eine Kürzung mit Argument
Null (zB `%<') markiert das Ende des Bereichs der zu kürzenden Zeichenfolge, während
Abschalten der Kürzung von da an. Zum Beispiel die Eingabeaufforderung `%10<...<%~%<<%# '
druckt eine gekürzte Darstellung des aktuellen Verzeichnisses, gefolgt von einem `%'
oder `#', gefolgt von einem Leerzeichen. Ohne das `%<', wären diese beiden Zeichen
in der zu kürzenden Zeichenfolge enthalten. Beachten Sie, dass `%-0<' ist nicht gleichbedeutend mit
`%<', gibt aber an, dass die Eingabeaufforderung am rechten Rand abgeschnitten wird.

Die Kürzung erfolgt nur innerhalb der einzelnen Zeilen der Eingabeaufforderung, begrenzt durch
eingebettete Zeilenumbrüche (falls vorhanden). Wenn die Gesamtlänge einer beliebigen Zeile der Eingabeaufforderung nach
Wenn die Abschneidung größer ist als die Klemmenbreite, oder wenn der abzuschneidende Teil
enthält eingebettete Zeilenumbrüche, das Abschneideverhalten ist undefiniert und kann sich in einem
zukünftige Version der Shell. Verwenden Sie `%-n(ICH.wahrer Text.falscher Text)' um Teile von
die Eingabeaufforderung, wenn der verfügbare Speicherplatz kleiner ist als n.

Verwenden Sie zshmisc online mit den Diensten von onworks.net


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad




×
Werbung
❤ ️Hier einkaufen, buchen oder kaufen – kostenlos, damit die Dienste kostenlos bleiben.