bash - Referenzhandbuch, Optionen, Befehlsbeispiele


NAME

bash - GNU Bourne-Again SHell

ZUSAMMENFASSUNG

bash [options] [command_string | file]

URHEBERRECHTE ©

Bash unterliegt dem Copyright (C) 1989–2020 der Free Software Foundation, Inc.

BESCHREIBUNG

Bash ist ein sh-kompatibler Befehlsspracheninterpreter, der aus der Standardeingabe oder aus einer Datei gelesene Befehle ausführt. Bash enthält auch nützliche Funktionen der Shells Korn und C (ksh und csh). ).

Bash soll eine konforme Implementierung des Shell- und Utilities-Teils der IEEE POSIX-Spezifikation (IEEE-Standard 1003.1) sein. Bash kann standardmäßig so konfiguriert werden, dass es POSIX-konform ist.

OPTIONEN

Alle Einzelzeichen-Shell-Optionen, die in der Beschreibung des integrierten Befehls set dokumentiert sind, einschließlich -o, können beim Aufruf der Shell als Optionen verwendet werden. Darüber hinaus interpretiert bash beim Aufruf die folgenden Optionen:

-c

Wenn die Option -c vorhanden ist, werden Befehle aus dem ersten Nicht-Optionsargument command_string gelesen. Wenn nach dem command_string Argumente vorhanden sind, wird das erste Argument $0 zugewiesen und alle verbleibenden Argumente werden den Positionsparametern zugewiesen. Die Zuweisung zu $0 legt den Namen der Shell fest, der in Warn- und Fehlermeldungen verwendet wird.

-i

Wenn die Option -i vorhanden ist, ist die Shell interaktiv.

-l

Sorgen Sie dafür, dass sich bash so verhält, als wäre es als Login-Shell aufgerufen worden (siehe INVOCATION unten).

-r

Wenn die Option -r vorhanden ist, wird die Shell eingeschränkt (siehe EINGESCHRÄNKTE SHELL unten).

-s

Wenn die Option -s vorhanden ist oder nach der Optionsverarbeitung keine Argumente übrig bleiben, werden Befehle aus der Standardeingabe gelesen. Mit dieser Option können die Positionsparameter festgelegt werden, wenn eine interaktive Shell aufgerufen oder Eingaben über eine Pipe gelesen werden.

-D

Auf der Standardausgabe wird eine Liste aller in doppelte Anführungszeichen gesetzten Zeichenfolgen mit vorangestelltem $ ausgegeben. Dies sind die Zeichenfolgen, die der Sprachübersetzung unterliegen, wenn das aktuelle Gebietsschema nicht C oder POSIX ist. Dies impliziert die Option -n; Es werden keine Befehle ausgeführt.

[-+]O [shopt_option]

shopt_option ist eine der Shell-Optionen, die vom shopt-Built-In akzeptiert werden (siehe SHELL BUILTIN-BEFEHLE unten). Wenn shopt_option vorhanden ist, legt -O den Wert dieser Option fest; +O deaktiviert es. Wenn shopt_option nicht angegeben wird, werden die Namen und Werte der von shopt akzeptierten Shell-Optionen in der Standardausgabe ausgegeben. Wenn die Aufrufoption +O ist, wird die Ausgabe in einem Format angezeigt, das als Eingabe wiederverwendet werden kann.

--

Ein -- signalisiert das Ende der Optionen und deaktiviert die weitere Optionsverarbeitung. Alle Argumente nach dem -- werden als Dateinamen und Argumente behandelt. Ein Argument von - ist äquivalent zu --.

Bash interpretiert auch eine Reihe von Mehrzeichenoptionen. Diese Optionen müssen in der Befehlszeile vor den Einzelzeichenoptionen angezeigt werden, damit sie erkannt werden.

--debugger

Sorgen Sie dafür, dass das Debugger-Profil vor dem Start der Shell ausgeführt wird. Aktiviert den erweiterten Debugging-Modus (siehe die Beschreibung der extdebug-Option für das shopt-Built-In unten).

--dump-po-strings

Äquivalent zu -D, aber die Ausgabe erfolgt im GNU gettext po-Dateiformat (Portable Object).

--dump-strings

Entspricht -D.

--help

Zeigen Sie eine Nutzungsmeldung in der Standardausgabe an und beenden Sie den Vorgang erfolgreich.

--init-file file
--rcfile file

Führen Sie Befehle aus der Datei anstelle der standardmäßigen persönlichen Initialisierungsdatei ~/.bashrc aus, wenn die Shell interaktiv ist (siehe INVOCATION unten).

--login

Entspricht -l.

--noediting

Verwenden Sie nicht die GNU-Bibliothek readline zum Lesen von Befehlszeilen, wenn die Shell interaktiv ist.

--noprofile

Lesen Sie weder die systemweite Startdatei  /etc/profile  noch eine der persönlichen Initialisierungsdateien ~/.bash_profile, ~/.bash_login oder ~/.profile. Standardmäßig liest bash diese Dateien, wenn es als Login-Shell aufgerufen wird (siehe INVOCATION unten).

--norc

Lesen Sie die persönliche Initialisierungsdatei ~/.bashrc nicht und führen Sie sie nicht aus, wenn die Shell interaktiv ist. Diese Option ist standardmäßig aktiviert, wenn die Shell als sh aufgerufen wird.

--posix

Ändern Sie das Verhalten von bash, wenn die Standardoperation vom POSIX-Standard abweicht, um sie an den Standard anzupassen (Posix-Modus). Siehe SIEHE AUCH unten für einen Verweis auf ein Dokument, das detailliert beschreibt, wie sich der Posix-Modus auf das Verhalten von Bash auswirkt.

--restricted

Die Shell wird eingeschränkt (siehe EINGESCHRÄNKTE SHELL unten).

--verbose

Entspricht -v.

--version

Versionsinformationen für diese Instanz von bash in der Standardausgabe anzeigen und erfolgreich beenden.

ARGUMENTE

Wenn nach der Optionsverarbeitung Argumente übrig bleiben und weder die Option -c noch die Option -s angegeben wurde, wird davon ausgegangen, dass das erste Argument der Name einer Datei ist, die Shell-Befehle enthält . Wenn bash auf diese Weise aufgerufen wird, wird $0 auf den Namen der Datei gesetzt und die Positionsparameter werden auf die verbleibenden Argumente gesetzt. Bash liest und führt Befehle aus dieser Datei aus und wird dann beendet. Der Exit-Status von Bash ist der Exit-Status des letzten im Skript ausgeführten Befehls. Wenn keine Befehle ausgeführt werden, ist der Exit-Status 0. Es wird zunächst versucht, die Datei im aktuellen Verzeichnis zu öffnen. Wenn keine Datei gefunden wird, durchsucht die Shell die Verzeichnisse in PATH nach das Drehbuch.

AUFRUF

Eine Login-Shell ist eine, deren erstes Zeichen des Arguments Null ein - ist, oder eine, die mit der Option --login beginnt.

Eine interaktive Shell wird ohne Nicht-Optionsargumente (es sei denn, -s ist angegeben) und ohne die Option -c gestartet, deren Standardeingabe und -fehler erfolgt beide mit Terminals verbunden sind (wie durch isatty(3) bestimmt) oder eines mit der Option -i gestartet wurde.

PS1 ist festgelegt und $- enthält i, wenn bash interaktiv ist, sodass ein Shell-Skript oder eine Startdatei ausgeführt werden kann Testen Sie diesen Zustand.

Die folgenden Absätze beschreiben, wie bash seine Startdateien ausführt. Wenn eine der Dateien vorhanden ist, aber nicht gelesen werden kann, meldet bash einen Fehler. Tilden werden in Dateinamen erweitert, wie unten unter Tilde-Erweiterung im Abschnitt ERWEITERUNG beschrieben.

Wenn bash als interaktive Login-Shell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, liest es zuerst Befehle aus der Datei und führt sie aus /etc/profile, falls diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht es nach ~/.bash_profile, ~/.bash_login und ~/.profile, in dieser Reihenfolge, und liest und führt Befehle aus dem ersten Befehl aus, der existiert und lesbar ist. Die Option --noprofile kann beim Starten der Shell verwendet werden, um dieses Verhalten zu verhindern.

Wenn eine interaktive Login-Shell beendet wird oder eine nicht interaktive Login-Shell den integrierten Befehl exit ausführt, liest bash Befehle aus der Datei ~/.bash_logout und führt sie aus , falls vorhanden.

Wenn eine interaktive Shell gestartet wird, die keine Login-Shell ist, liest bash Befehle aus ~/.bashrc und führt sie aus, sofern diese Datei vorhanden ist. Dies kann durch Verwendung der Option --norc verhindert werden. Die Option --rcfile file zwingt bash, Befehle aus file statt aus ~ zu lesen und auszuführen /.bashrc.

Wenn bash nicht interaktiv gestartet wird, um beispielsweise ein Shell-Skript auszuführen, sucht es nach der Variablen BASH_ENV in der Umgebung, erweitert ihren Wert, wenn er dort erscheint, und verwendet den erweiterten Wert als Namen einer Datei zum Lesen und Ausführen. Bash verhält sich so, als ob der folgende Befehl ausgeführt würde:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

Der Wert der Variablen PATH wird jedoch nicht für die Suche nach dem Dateinamen verwendet.

Wenn bash mit dem Namen sh aufgerufen wird, versucht es, das Startverhalten historischer Versionen von sh so genau wie möglich nachzuahmen und dabei zu entsprechen auch der POSIX-Standard. Wenn es als interaktive Login-Shell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, versucht es zunächst, Befehle aus /etc/profile und < zu lesen und auszuführen~/.profile, in dieser Reihenfolge. Die Option --noprofile kann verwendet werden, um dieses Verhalten zu verhindern. Beim Aufruf als interaktive Shell mit dem Namen sh sucht bash nach der Variablen ENV, erweitert ihren Wert, sofern er definiert ist, und verwendet die erweiterter Wert als Name einer Datei, die gelesen und ausgeführt werden soll. Da eine als sh aufgerufene Shell nicht versucht, Befehle aus anderen Startdateien zu lesen und auszuführen, hat die Option --rcfile keine Auswirkung. Eine nicht interaktive Shell, die mit dem Namen sh aufgerufen wird, versucht nicht, andere Startdateien zu lesen. Beim Aufruf als sh wechselt bash in den posix-Modus, nachdem die Startdateien gelesen wurden.

Wenn bash im posix-Modus gestartet wird, folgt es, wie bei der Befehlszeilenoption --posix, dem POSIX-Standard für Startdateien. In diesem Modus erweitern interaktive Shells die Variable ENV und Befehle werden aus der Datei gelesen und ausgeführt, deren Name der erweiterte Wert ist. Es werden keine anderen Startdateien gelesen.

Bash versucht festzustellen, wann es ausgeführt wird, während seine Standardeingabe mit einer Netzwerkverbindung verbunden ist, z. B. wenn es vom Remote-Shell-Daemon, normalerweise rshd, oder vom Secure Shell-Daemon ausgeführt wird sshd. Wenn bash feststellt, dass es auf diese Weise ausgeführt wird, liest es Befehle aus ~/.bashrc und führt sie aus, sofern diese Datei vorhanden und lesbar ist. Dies geschieht nicht, wenn es als sh aufgerufen wird. Die Option --norc kann verwendet werden, um dieses Verhalten zu verhindern, und die Option --rcfile kann verwendet werden, um das Lesen einer anderen Datei zu erzwingen, jedoch weder rshd noch sshd rufen im Allgemeinen die Shell mit diesen Optionen auf oder erlauben deren Angabe.

Wenn die Shell mit der effektiven Benutzer-(Gruppen-)ID gestartet wird, die nicht mit der echten Benutzer-(Gruppen-)ID übereinstimmt, und die Option -p nicht angegeben ist, werden keine Startdateien gelesen, Shell-Funktionen jedoch nicht Von der Umgebung geerbte Variablen SHELLOPTS, BASHOPTS, CDPATH und GLOBIGNORE, sofern sie in der Umgebung vorkommen werden ignoriert und die effektive Benutzer-ID wird auf die tatsächliche Benutzer-ID gesetzt. Wenn die Option -p beim Aufruf angegeben wird, ist das Startverhalten dasselbe, aber die effektive Benutzer-ID wird nicht zurückgesetzt.

DEFINITIONEN

Im weiteren Verlauf dieses Dokuments werden die folgenden Definitionen verwendet.

blank

Ein Leerzeichen oder Tab.

word

Eine Zeichenfolge, die von der Shell als eine Einheit betrachtet wird. Auch als Token bekannt.

name

Ein Wort, das nur aus alphanumerischen Zeichen und Unterstrichen besteht und mit einem alphabetischen Zeichen oder einem Unterstrich beginnt. Wird auch als Identifikator bezeichnet.

metacharacter

Ein Zeichen, das Wörter trennt, wenn es nicht in Anführungszeichen gesetzt wird. Eines der folgenden:

| & ; ( ) < > space tab newline
control operator

Ein Token, der eine Kontrollfunktion ausführt. Es ist eines der folgenden Symbole:

|| & && ; ;; ;& ;;& ( ) | |& <newline>

RESERVIERTE WÖRTER

Reservierte Wörter sind Wörter, die für die Shell eine besondere Bedeutung haben. Die folgenden Wörter werden als reserviert erkannt, wenn sie nicht in Anführungszeichen stehen und entweder das erste Wort eines Befehls (siehe SHELL-GRAMMAR unten), das dritte Wort eines case oder select< sind-Befehl (nur in ist gültig) oder das dritte Wort eines for-Befehls (nur in und do) sind gültig):

! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]

Shell-Grammatik

Einfache Befehle

Ein einfacher Befehl ist eine Folge optionaler Variablenzuweisungen, gefolgt von durch Leerzeichen getrennten Wörtern und Umleitungen und abgeschlossen durch einen Kontrolloperator. Das erste Wort gibt den auszuführenden Befehl an und wird als Argument Null übergeben. Die restlichen Wörter werden als Argumente an den aufgerufenen Befehl übergeben.

Der Rückgabewert eines einfachen Befehls ist sein Exit-Status oder 128+n , wenn der Befehl durch das Signal n beendet wird.

Pipelines

Eine Pipeline ist eine Folge von einem oder mehreren Befehlen, die durch einen der Steueroperatoren | oder |& getrennt sind. Das Format für eine Pipeline ist:

[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]

Die Standardausgabe von command ist über eine Pipe mit der Standardeingabe von command2 verbunden. Diese Verbindung wird vor allen durch den Befehl angegebenen Umleitungen ausgeführt (siehe UMLEITUNG unten). Wenn |& verwendet wird, wird der Standardfehler von command zusätzlich zu seiner Standardausgabe über den mit der Standardeingabe von command2 verbunden Rohr; es ist eine Abkürzung für 2>&1 |. Diese implizite Umleitung der Standardfehlerausgabe zur Standardausgabe erfolgt nach allen durch den Befehl angegebenen Umleitungen.

Der Rückgabestatus einer Pipeline ist der Exit-Status des letzten Befehls, es sei denn, die Option pipefail ist aktiviert. Wenn pipefail aktiviert ist, ist der Rückgabestatus der Pipeline der Wert des letzten Befehls (ganz rechts), der mit einem Status ungleich Null beendet wurde, oder Null, wenn alle Befehle erfolgreich beendet wurden. Wenn das reservierte Wort ! einer Pipeline vorausgeht, ist der Exit-Status dieser Pipeline die logische Negation des Exit-Status, wie oben beschrieben. Die Shell wartet auf die Beendigung aller Befehle in der Pipeline, bevor sie einen Wert zurückgibt.

Wenn das reservierte Wort time einer Pipeline vorausgeht, werden bei Beendigung der Pipeline die verstrichene sowie die durch die Ausführung verbrauchte Benutzer- und Systemzeit gemeldet. Die Option -p ändert das Ausgabeformat in das von POSIX angegebene. Wenn sich die Shell im Posix-Modus befindet, erkennt sie time nicht als reserviertes Wort, wenn das nächste Token mit einem „-“ beginnt. Die Variable TIMEFORMAT kann auf eine Formatzeichenfolge gesetzt werden, die angibt, wie die Zeitinformationen angezeigt werden sollen; siehe die Beschreibung von TIMEFORMAT unter Shell-Variablen unten.

Wenn sich die Shell im Posix-Modus befindet, kann auf time ein Zeilenumbruch folgen. In diesem Fall zeigt die Shell die gesamte Benutzer- und Systemzeit an, die von der Shell und ihren untergeordneten Elementen verbraucht wird. Die Variable TIMEFORMAT kann verwendet werden, um das Format der Zeitinformationen anzugeben.

Jeder Befehl in einer Pipeline wird als separater Prozess (d. h. in einer Subshell) ausgeführt. Eine Beschreibung einer Subshell-Umgebung finden Sie unter COMMAND EXECUTION ENVIRONMENT. Wenn die Option lastpipe mit dem integrierten shopt aktiviert ist (siehe die Beschreibung von shopt unten), kann das letzte Element einer Pipeline ausgeführt werden Der Shell-Prozess.

Listen

Eine Liste ist eine Folge von einer oder mehreren Pipelines, die durch einen der Operatoren ;, &, &&, oder || und optional mit einem von ;, & oder <newline> abgeschlossen.

Von diesen Listenoperatoren haben && und || die gleiche Priorität, gefolgt von ; und &, die die gleiche Priorität haben Vorrang.

Anstelle eines Semikolons zum Trennen von Befehlen kann in einer Liste eine Folge von einem oder mehreren Zeilenumbrüchen erscheinen.

Wird ein Befehl durch den Kontrolloperator & beendet, führt die Shell den Befehl im Hintergrund in einer Subshell aus. Die Shell wartet nicht auf die Beendigung des Befehls und der Rückgabestatus ist 0. Diese Befehle werden als asynchrone Befehle bezeichnet. Durch ein ; getrennte Befehle werden nacheinander ausgeführt. Die Shell wartet darauf, dass jeder Befehl nacheinander beendet wird. Der Rückgabestatus ist der Exit-Status des zuletzt ausgeführten Befehls.

AND- und OR-Listen sind Sequenzen einer oder mehrerer Pipelines, die durch die Steueroperatoren && bzw. || getrennt sind. UND- und ODER-Listen werden linksassoziativ ausgeführt. Eine UND-Liste hat die Form

command1 && command2

command2 wird genau dann ausgeführt, wenn command1 den Exit-Status Null (Erfolg) zurückgibt.

Eine ODER-Liste hat die Form

command1 || command2

command2 wird genau dann ausgeführt, wenn command1 einen Exit-Status ungleich Null zurückgibt. Der Rückgabestatus von AND- und OR-Listen ist der Exit-Status des letzten in der Liste ausgeführten Befehls.

Zusammengesetzte Befehle

Ein zusammengesetzter Befehl ist einer der folgenden. In den meisten Fällen kann eine Liste in der Beschreibung eines Befehls vom Rest des Befehls durch einen oder mehrere Zeilenumbrüche getrennt sein und kann von einem Zeilenumbruch anstelle eines Semikolons gefolgt werden.

(list)

list wird in einer Subshell-Umgebung ausgeführt (siehe COMMAND EXECUTION ENVIRONMENT unten). Variablenzuweisungen und integrierte Befehle, die sich auf die Umgebung der Shell auswirken, bleiben nach Abschluss des Befehls nicht wirksam. Der Rückgabestatus ist der Exit-Status von list

{ list; }

list wird einfach in der aktuellen Shell-Umgebung ausgeführt. list muss mit einer neuen Zeile oder einem Semikolon abgeschlossen werden. Dies wird als Gruppenbefehl bezeichnet. Der Rückgabestatus ist der Exit-Status von list. Beachten Sie, dass { und } im Gegensatz zu den Metazeichen ( und ) reservierte Wörter sind und muss dort auftreten, wo ein reserviertes Wort erkannt werden darf. Da sie keinen Wortumbruch verursachen, müssen sie durch Leerzeichen oder ein anderes Shell-Metazeichen von list getrennt werden.

((expression))

Der Ausdruck wird gemäß den unten unter ARITHMETISCHE AUSWERTUNG beschriebenen Regeln ausgewertet. Wenn der Wert des Ausdrucks ungleich Null ist, ist der Rückgabestatus 0; andernfalls ist der Rückgabestatus 1. Dies entspricht genau let "expression".

[[ expression ]]

Gibt einen Status von 0 oder 1 zurück, abhängig von der Auswertung des bedingten Ausdrucks expression. Ausdrücke bestehen aus den unten unter BEDINGTE AUSDRÜCKE beschriebenen Primären. Wortaufteilung und Pfadnamenerweiterung werden nicht für die Wörter zwischen [[ und ]] durchgeführt; Tilde-Erweiterung, Parameter- und Variablenerweiterung, arithmetische Erweiterung, Befehlsersetzung, Prozessersetzung und Anführungszeichenentfernung werden durchgeführt. Bedingungsoperatoren wie -f müssen ohne Anführungszeichen stehen, um als Primäroperatoren erkannt zu werden.

Bei Verwendung mit [[“ sortieren die Operatoren < und > lexikografisch anhand des aktuellen Gebietsschemas.

Wenn die Operatoren == und != verwendet werden, wird die Zeichenfolge rechts vom Operator als Muster betrachtet und gemäß den unten unter Muster beschriebenen Regeln abgeglichen Übereinstimmung, als ob die extglob-Shell-Option aktiviert wäre. Der Operator = entspricht ==. Wenn die Shell-Option nocasematch aktiviert ist, wird der Abgleich ohne Rücksicht auf die Groß-/Kleinschreibung alphabetischer Zeichen durchgeführt. Der Rückgabewert ist 0, wenn die Zeichenfolge mit dem Muster übereinstimmt (==) oder nicht übereinstimmt (!=), andernfalls 1. Jeder Teil des Musters kann in Anführungszeichen gesetzt werden, um zu erzwingen, dass der in Anführungszeichen gesetzte Teil als Zeichenfolge abgeglichen wird.

Ein zusätzlicher binärer Operator, =~, ist verfügbar, mit derselben Priorität wie == und !=. Wenn es verwendet wird, wird die Zeichenfolge rechts vom Operator als erweiterter regulärer POSIX-Ausdruck betrachtet und entsprechend abgeglichen (unter Verwendung der POSIX-Schnittstellen regcomp und regexec, die normalerweise in regex(3)). Der Rückgabewert ist 0, wenn die Zeichenfolge mit dem Muster übereinstimmt, andernfalls 1. Wenn der reguläre Ausdruck syntaktisch falsch ist, ist der Rückgabewert des bedingten Ausdrucks 2. Wenn die Shell-Option nocasematch aktiviert ist, wird der Abgleich ohne Rücksicht auf die Groß-/Kleinschreibung alphabetischer Zeichen durchgeführt. Jeder Teil des Musters kann in Anführungszeichen gesetzt werden, um zu erzwingen, dass der in Anführungszeichen gesetzte Teil als Zeichenfolge abgeglichen wird. Klammerausdrücke in regulären Ausdrücken müssen sorgfältig behandelt werden, da normale Anführungszeichen zwischen Klammern ihre Bedeutung verlieren. Wenn das Muster in einer Shell-Variablen gespeichert ist, erzwingt die Angabe der Variablenerweiterung, dass das gesamte Muster als Zeichenfolge abgeglichen wird.

Das Muster stimmt überein, wenn es mit irgendeinem Teil der Zeichenfolge übereinstimmt. Verankern Sie das Muster mit den regulären Ausdrucksoperatoren ^ und $, um zu erzwingen, dass es mit der gesamten Zeichenfolge übereinstimmt. Die Array-Variable BASH_REMATCH zeichnet auf, welche Teile der Zeichenfolge mit dem Muster übereinstimmten. Das Element von BASH_REMATCH mit Index 0 enthält den Teil der Zeichenfolge, der mit dem gesamten regulären Ausdruck übereinstimmt. Teilzeichenfolgen, die mit in Klammern gesetzten Teilausdrücken innerhalb des regulären Ausdrucks übereinstimmen, werden in den verbleibenden BASH_REMATCH-Indizes gespeichert. Das Element von BASH_REMATCH mit dem Index n ist der Teil der Zeichenfolge, der mit dem nten Teilausdruck in Klammern übereinstimmt.

Ausdrücke können mit den folgenden Operatoren kombiniert werden, die in absteigender Reihenfolge aufgeführt sind:

( expression )

Gibt den Wert von Ausdruck zurück. Dies kann verwendet werden, um die normale Priorität von Operatoren außer Kraft zu setzen.

! expression

Wahr, wenn Ausdruck falsch ist.

expression1 && expression2

True, wenn sowohl expression1 als auch expression2 true sind.

expression1 || expression2

Wahr, wenn entweder Ausdruck1 oder Ausdruck2 wahr ist.

Die Operatoren && und || werten expression2 nicht aus, wenn der Wert von expression1 ausreicht, um den Rückgabewert zu bestimmen des gesamten bedingten Ausdrucks.

for name [ [ in [ word ... ] ] ; ] do list ; done

Die Liste der Wörter, die auf in folgen, wird erweitert und eine Liste mit Elementen erstellt. Die Variable name wird der Reihe nach auf jedes Element dieser Liste gesetzt und list wird jedes Mal ausgeführt. Wenn das in word weggelassen wird, führt der for-Befehl list einmal für jeden gesetzten Positionsparameter aus (siehe PARAMETER unten). Der Rückgabestatus ist der Exit-Status des letzten ausgeführten Befehls. Wenn die Erweiterung der Elemente nach in zu einer leeren Liste führt, werden keine Befehle ausgeführt und der Rückgabestatus ist 0.

for (( expr1 ; expr2 ; expr3 )) ; do list ; done

Zunächst wird der arithmetische Ausdruck expr1 nach den unten unter ARITHMETISCHE AUSWERTUNG beschriebenen Regeln ausgewertet. Der arithmetische Ausdruck expr2 wird dann wiederholt ausgewertet, bis er Null ergibt. Jedes Mal, wenn expr2 einen Wert ungleich Null ergibt, wird list ausgeführt und der arithmetische Ausdruck expr3 ausgewertet. Wenn ein Ausdruck weggelassen wird, verhält er sich so, als würde er 1 ergeben. Der Rückgabewert ist der Exit-Status des letzten Befehls in list, der ausgeführt wurde, oder „false“, wenn einer der Ausdrücke ungültig ist.

select name [ in word ] ; do list ; done

Die Liste der Wörter, die auf in folgen, wird erweitert und eine Liste mit Elementen erstellt. Die Menge der erweiterten Wörter wird auf dem Standardfehler gedruckt, wobei jedem eine Zahl vorangestellt ist. Wenn das in word weggelassen wird, werden die Positionsparameter ausgegeben (siehe PARAMETER unten). Anschließend wird die PS3-Eingabeaufforderung angezeigt und eine Zeile aus der Standardeingabe gelesen. Wenn die Zeile aus einer Zahl besteht, die einem der angezeigten Wörter entspricht, wird der Wert von name auf dieses Wort gesetzt. Wenn die Zeile leer ist, werden die Wörter und die Eingabeaufforderung erneut angezeigt. Wenn EOF gelesen wird, wird der Befehl abgeschlossen. Jeder andere gelesene Wert führt dazu, dass name auf null gesetzt wird. Die gelesene Zeile wird in der Variablen REPLY gespeichert. Die list wird nach jeder Auswahl ausgeführt, bis ein break-Befehl ausgeführt wird. Der Exit-Status von select ist der Exit-Status des letzten in list ausgeführten Befehls oder Null, wenn keine Befehle ausgeführt wurden.

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac

Ein case-Befehl erweitert zunächst Wort und versucht, es nacheinander mit jedem Muster abzugleichen, wobei die unter Musterabgleich» beschriebenen Abgleichsregeln verwendet werden unten. Das Wort wird durch Tilde-Erweiterung, Parameter- und Variablenerweiterung, arithmetische Erweiterung, Befehlsersetzung, Prozessersetzung und Anführungszeichenentfernung erweitert. Jedes untersuchte Muster wird durch Tilde-Erweiterung, Parameter- und Variablenerweiterung, arithmetische Erweiterung, Befehlssubstitution und Prozesssubstitution erweitert. Wenn die Shell-Option nocasematch aktiviert ist, wird der Abgleich ohne Rücksicht auf die Groß-/Kleinschreibung alphabetischer Zeichen durchgeführt. Wenn eine Übereinstimmung gefunden wird, wird die entsprechende Liste ausgeführt. Wenn der Operator ;; verwendet wird, werden nach der ersten Musterübereinstimmung keine weiteren Übereinstimmungen mehr versucht. Die Verwendung von ;& anstelle von ;; führt dazu, dass die Ausführung mit der Liste fortgesetzt wird, die dem nächsten Mustersatz zugeordnet ist. Die Verwendung von ;;& anstelle von ;; führt dazu, dass die Shell die nächste Musterliste in der Anweisung (falls vorhanden) testet und alle zugehörigen list ausführt Bei einer erfolgreichen Übereinstimmung wird die Ausführung der Case-Anweisung so fortgesetzt, als ob die Musterliste nicht übereinstimmt. Der Exit-Status ist Null, wenn kein Muster übereinstimmt. Andernfalls handelt es sich um den Exit-Status des zuletzt in list ausgeführten Befehls.

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

Die if list wird ausgeführt. Wenn sein Exit-Status Null ist, wird die then-Liste ausgeführt. Andernfalls wird jede elif list der Reihe nach ausgeführt, und wenn ihr Exit-Status Null ist, wird die entsprechende then list ausgeführt wird ausgeführt und der Befehl abgeschlossen. Andernfalls wird die else list ausgeführt, sofern vorhanden. Der Exit-Status ist der Exit-Status des zuletzt ausgeführten Befehls oder Null, wenn keine Bedingung als wahr getestet wurde.

while list-1; do list-2; done
until list-1; do list-2; done

Der Befehl while führt die Liste list-2 kontinuierlich aus, solange der letzte Befehl in der Liste list-1 den Exit-Status Null zurückgibt. Der Befehl until ist identisch mit dem Befehl while, außer dass der Test negiert wird: list-2 wird so lange ausgeführt, wie der letzte Befehl in list-1 gibt einen Exit-Status ungleich Null zurück. Der Exit-Status der Befehle while und until ist der Exit-Status des letzten in list-2 ausgeführten Befehls oder Null, wenn keiner ausgeführt wurde .

Koprozesse

Ein coprocess ist ein Shell-Befehl, dem das reservierte Wort coproc vorangestellt ist. Ein Coprozess wird asynchron in einer Subshell ausgeführt, als ob der Befehl mit dem Steueroperator & beendet worden wäre, wobei eine bidirektionale Pipe zwischen der ausführenden Shell und dem Coprozess eingerichtet wird.

Das Format für einen Coprozess ist:

coproc [NAME] command [redirections]

Dadurch wird ein Coprozess mit dem Namen NAME erstellt. Wenn NAME nicht angegeben wird, lautet der Standardname COPROC. NAME darf nicht angegeben werden, wenn command ein einfacher Befehl ist (siehe oben); andernfalls wird es als erstes Wort des einfachen Befehls interpretiert. Wenn der Coprozess ausgeführt wird, erstellt die Shell eine Array-Variable (siehe Arrays unten) mit dem Namen NAME im Kontext der ausführenden Shell. Die Standardausgabe von command ist über eine Pipe mit einem Dateideskriptor in der ausführenden Shell verbunden, und dieser Dateideskriptor wird NAME[0] zugewiesen. Die Standardeingabe von command ist über eine Pipe mit einem Dateideskriptor in der ausführenden Shell verbunden, und dieser Dateideskriptor wird NAME[1] zugewiesen. Diese Pipe wird vor allen durch den Befehl angegebenen Umleitungen eingerichtet (siehe REDIRECTION unten). Die Dateideskriptoren können als Argumente für Shell-Befehle und Umleitungen mithilfe von Standardworterweiterungen verwendet werden. Anders als diejenigen, die zum Ausführen von Befehls- und Prozessersetzungen erstellt wurden, sind die Dateideskriptoren in Subshells nicht verfügbar. Die Prozess-ID der Shell, die zum Ausführen des Coprozesses erzeugt wurde, ist als Wert der Variablen NAME_PID verfügbar. Der integrierte Befehl wait kann verwendet werden, um auf die Beendigung des Coprozesses zu warten.

Da der Coprozess als asynchroner Befehl erstellt wird, gibt der Befehl coproc immer einen Erfolg zurück. Der Rückgabestatus eines Coprozesses ist der Exit-Status von Befehl.

Shell-Funktionsdefinitionen

Eine Shell-Funktion ist ein Objekt, das wie ein einfacher Befehl aufgerufen wird und einen zusammengesetzten Befehl mit einem neuen Satz Positionsparameter ausführt. Shellfunktionen werden wie folgt deklariert:

fname () compound-command [redirection]
function fname [()] compound-command [redirection]

Dies definiert eine Funktion namens fname. Das reservierte Wort function ist optional. Wenn das reservierte Wort Funktion angegeben wird, sind die Klammern optional. Der Körper der Funktion ist der zusammengesetzte Befehl compound-command (siehe Zusammengesetzte Befehle oben). Bei diesem Befehl handelt es sich normalerweise um eine Liste von Befehlen zwischen { und }, es kann sich aber auch um einen beliebigen Befehl handeln, der oben unter Zusammengesetzte Befehle aufgeführt ist, mit einer Ausnahme: Wenn die Funktion reserviertes Wort wird verwendet, aber die Klammern werden nicht angegeben, die geschweiften Klammern sind erforderlich. compound-command wird immer dann ausgeführt, wenn fname als Name eines einfachen Befehls angegeben wird. Im Posix-Modus muss fname ein gültiger Shell-Name sein und darf nicht der Name eines der POSIX-speziellen Builtins sein . Im Standardmodus kann ein Funktionsname ein beliebiges Shell-Wort ohne Anführungszeichen sein, das kein $ enthält. Alle Umleitungen (siehe REDIRECTION unten), die bei der Definition einer Funktion angegeben wurden, werden durchgeführt, wenn die Funktion ausgeführt wird. Der Exit-Status einer Funktionsdefinition ist Null, es sei denn, es tritt ein Syntaxfehler auf oder es ist bereits eine schreibgeschützte Funktion mit demselben Namen vorhanden. Bei der Ausführung ist der Exit-Status einer Funktion der Exit-Status des letzten im Hauptteil ausgeführten Befehls. (Siehe FUNKTIONEN unten.)

KOMMENTARE

In einer nicht interaktiven Shell oder einer interaktiven Shell, in der die Option interactive_comments für die shopt-Integration aktiviert ist (siehe SHELL BUILTIN COMMANDS unten) , führt ein Wort, das mit # beginnt, dazu, dass dieses Wort und alle verbleibenden Zeichen in dieser Zeile ignoriert werden. Eine interaktive Shell ohne aktivierte Option interactive_comments lässt keine Kommentare zu. Die Option interactive_comments ist in interaktiven Shells standardmäßig aktiviert.

ZITIEREN

Quoting wird verwendet, um die besondere Bedeutung bestimmter Zeichen oder Wörter aus der Shell zu entfernen. Anführungszeichen können verwendet werden, um die Sonderbehandlung von Sonderzeichen zu deaktivieren, um zu verhindern, dass reservierte Wörter als solche erkannt werden, und um eine Parametererweiterung zu verhindern.

Jedes der oben unter DEFINITIONEN aufgeführten Metazeichen hat eine besondere Bedeutung für die Shell und muss in Anführungszeichen gesetzt werden, wenn es sich selbst darstellen soll.

Wenn die Befehlsverlaufserweiterungsfunktionen verwendet werden (siehe HISTORY EXPANSION unten), muss das Zeichen history expand, normalerweise !, in Anführungszeichen gesetzt werden, um dies zu verhindern Geschichtserweiterung.

Es gibt drei Anführungszeichenmechanismen: das Escape-Zeichen, einfache Anführungszeichen und doppelte Anführungszeichen.

Ein nicht in Anführungszeichen gesetzter Backslash (\) ist das Escape-Zeichen. Der Literalwert des nächsten folgenden Zeichens bleibt erhalten, mit Ausnahme von <newline>. Wenn ein \<newline>-Paar erscheint und der Backslash selbst nicht in Anführungszeichen steht, wird \<newline> als Zeilenfortsetzung behandelt (d. h. aus entfernt). den Eingabestrom und wird effektiv ignoriert).

Durch das Einschließen von Zeichen in einfache Anführungszeichen bleibt der Literalwert jedes Zeichens innerhalb der Anführungszeichen erhalten. Zwischen einfachen Anführungszeichen darf kein einfaches Anführungszeichen stehen, auch wenn davor ein Backslash steht.

Durch das Einschließen von Zeichen in doppelte Anführungszeichen bleibt der Literalwert aller Zeichen in den Anführungszeichen erhalten, mit Ausnahme von $, `, \ und wann Die Verlaufserweiterung ist aktiviert, !. Wenn sich die Shell im Posix-Modus befindet, hat das Zeichen ! in doppelten Anführungszeichen keine besondere Bedeutung, selbst wenn die Verlaufserweiterung aktiviert ist. Die Zeichen $ und ` behalten in doppelten Anführungszeichen ihre besondere Bedeutung. Der Backslash behält seine besondere Bedeutung nur, wenn ihm eines der folgenden Zeichen folgt: $, `,  " , \ oder <newline>. Ein doppeltes Anführungszeichen kann in doppelte Anführungszeichen gesetzt werden, indem ihm ein Backslash vorangestellt wird. Wenn diese Option aktiviert ist, wird die Verlaufserweiterung durchgeführt, sofern kein ! in erscheint Doppelte Anführungszeichen werden mit einem Backslash maskiert. Der Backslash vor dem ! wird nicht entfernt.

Die speziellen Parameter * und @ haben eine besondere Bedeutung, wenn sie in doppelte Anführungszeichen gesetzt werden (siehe PARAMETER unten).

Wörter der Form $'string' werden besonders behandelt. Das Wort wird zu string erweitert, wobei Backslash-Escape-Zeichen gemäß den Vorgaben des ANSI-C-Standards ersetzt werden. Falls vorhanden, werden Backslash-Escape-Sequenzen wie folgt dekodiert:

\a

Alarm (Glocke)

\b

Rücktaste

\e
\E

ein Escape-Zeichen

\f

Formularvorschub

\n

Neue Zeile

\r

Wagenrücklauf

\t

horizontale Registerkarte

\v

vertikale Registerkarte

\\

Backslash

\'

einfaches Anführungszeichen

\"

doppeltes Anführungszeichen

\?

Fragezeichen

\nnn

das Acht-Bit-Zeichen, dessen Wert der Oktalwert nnn ist (eine bis drei Oktalziffern)

\xHH

das Acht-Bit-Zeichen, dessen Wert der Hexadezimalwert HH ist (eine oder zwei Hexadezimalziffern)

\uHHHH

das Unicode-Zeichen (ISO/IEC 10646), dessen Wert der Hexadezimalwert HHHH ist (ein bis vier Hexadezimalziffern)

\UHHHHHHHH

das Unicode-Zeichen (ISO/IEC 10646), dessen Wert der Hexadezimalwert HHHHHHHH ist (eine bis acht Hexadezimalziffern)

\cx

ein Steuerzeichen x

Das erweiterte Ergebnis wird in einfache Anführungszeichen gesetzt, als ob das Dollarzeichen nicht vorhanden wäre.

Eine Zeichenfolge in doppelten Anführungszeichen, der ein Dollarzeichen vorangestellt ist ($"string"), führt dazu, dass die Zeichenfolge entsprechend dem aktuellen Gebietsschema übersetzt wird. Die gettext-Infrastruktur führt die Suche und Übersetzung des Nachrichtenkatalogs unter Verwendung der Shell-Variablen LC_MESSAGES und TEXTDOMAIN durch. Wenn das aktuelle Gebietsschema C oder POSIX ist oder keine Übersetzungen verfügbar sind, wird das Dollarzeichen ignoriert. Wenn die Zeichenfolge übersetzt und ersetzt wird, wird die Ersetzung in doppelte Anführungszeichen gesetzt.

PARAMETER

Ein Parameter ist eine Entität, die Werte speichert. Es kann ein Name, eine Zahl oder eines der unten unter Spezielle Parameter aufgeführten Sonderzeichen sein. Eine Variable ist ein Parameter, der durch einen Namen bezeichnet wird. Eine Variable hat einen Wert und null oder mehr Attribute. Attribute werden mit dem integrierten Befehl declare zugewiesen (siehe declare weiter unten in SHELL BUILTIN COMMANDS).

Ein Parameter ist gesetzt, wenn ihm ein Wert zugewiesen wurde. Die Nullzeichenfolge ist ein gültiger Wert. Sobald eine Variable gesetzt ist, kann sie nur mit dem eingebauten Befehl unset zurückgesetzt werden (siehe BUILTIN-BEFEHLE VON SHELL weiter unten).

Eine Variable kann durch eine Anweisung der Form zugewiesen werden

name=[value]

Wenn value nicht angegeben ist, wird der Variablen die Nullzeichenfolge zugewiesen. Alle Werte werden einer Tilde-Erweiterung, einer Parameter- und Variablenerweiterung, einer Befehlsersetzung, einer arithmetischen Erweiterung und einer Entfernung von Anführungszeichen unterzogen (siehe ERWEITERUNG unten). Wenn für die Variable das Attribut integer festgelegt ist, wird value als arithmetischer Ausdruck ausgewertet, auch wenn die Erweiterung $ ((...)) nicht verwendet wird (siehe Arithmetische Erweiterung unten). Eine Wortaufteilung wird nicht durchgeführt, mit Ausnahme von „$@“, wie unten unter Spezielle Parameter erläutert. Die Erweiterung des Pfadnamens wird nicht durchgeführt. Zuweisungsanweisungen können auch als Argumente für alias, declare, typeset, export, readonly< erscheinen und lokale integrierte Befehle (declaration-Befehle). Im Posix-Modus können diese Builtins in einem Befehl nach einer oder mehreren Instanzen des command-Builtins erscheinen und diese Eigenschaften der Zuweisungsanweisung beibehalten.

In dem Kontext, in dem eine Zuweisungsanweisung einer Shell-Variablen oder einem Array-Index einen Wert zuweist, kann der Operator += verwendet werden, um an den vorherigen Wert der Variablen anzuhängen oder diesen zu ergänzen. Dazu gehören Argumente für integrierte Befehle wie declare, die Zuweisungsanweisungen akzeptieren (declaration-Befehle). Wenn += auf eine Variable angewendet wird, für die das Attribut integer festgelegt wurde, wird value als arithmetischer Ausdruck ausgewertet und zum aktuellen Wert der Variablen addiert, der ebenfalls ausgewertet wird . Wenn += mithilfe einer zusammengesetzten Zuweisung auf eine Array-Variable angewendet wird (siehe Arrays unten), wird der Wert der Variablen nicht zurückgesetzt (wie es bei Verwendung von=der Fall ist) und neue Werte werden beginnend bei an das Array angehängt um eins größer als der maximale Index des Arrays (für indizierte Arrays) oder als zusätzliche Schlüssel-Wert-Paare in einem assoziativen Array hinzugefügt. Bei Anwendung auf eine Variable mit Zeichenfolgenwert wird value erweitert und an den Wert der Variablen angehängt.

Einer Variablen kann das Attribut nameref zugewiesen werden, indem die Option -n für die integrierten Befehle declare oder local verwendet wird (siehe (siehe Beschreibungen von declare und local unten), um eine nameref oder einen Verweis auf eine andere Variable zu erstellen. Dadurch können Variablen indirekt manipuliert werden. Immer wenn auf die Nameref-Variable verwiesen, ihr zugewiesen oder ihre Attribute geändert werden (mit Ausnahme der Verwendung oder Änderung des nameref-Attributs selbst), wird die Operation tatsächlich für die Variable ausgeführt, die durch den Wert der Nameref-Variablen angegeben wird . Eine Nameref wird üblicherweise in Shell-Funktionen verwendet, um auf eine Variable zu verweisen, deren Name als Argument an die Funktion übergeben wird. Wenn beispielsweise ein Variablenname als erstes Argument an eine Shell-Funktion übergeben wird, wird ausgeführt

declare -n ref=$1

Innerhalb der Funktion wird eine Nameref-Variable ref erstellt, deren Wert der als erstes Argument übergebene Variablenname ist. Verweise und Zuweisungen auf ref sowie Änderungen an seinen Attributen werden als Verweise, Zuweisungen und Attributänderungen auf die Variable behandelt, deren Name als $1 übergeben wurde. Wenn die Steuervariable in einer for-Schleife das nameref-Attribut hat, kann die Wortliste eine Liste von Shell-Variablen sein, und für jedes Wort in der Liste wird nacheinander eine Namensreferenz erstellt Die Schleife wird ausgeführt. Array-Variablen können nicht mit dem Attribut nameref versehen werden. Nameref-Variablen können jedoch auf Array-Variablen und indizierte Array-Variablen verweisen. Namerefs können mit der Option -n für die integrierte Funktion unset deaktiviert werden. Andernfalls wird, wenn unset mit dem Namen einer Nameref-Variablen als Argument ausgeführt wird, die von der Nameref-Variablen referenzierte Variable gelöscht.

Positionsparameter

Ein Positionsparameter ist ein Parameter, der durch eine oder mehrere Ziffern außer der einzelnen Ziffer 0 angegeben wird. Positionsparameter werden beim Aufruf aus den Argumenten der Shell zugewiesen und können mithilfe von set neu zugewiesen werden eingebauter Befehl. Positionsparameter dürfen nicht mit Zuweisungsanweisungen zugewiesen werden. Die Positionsparameter werden vorübergehend ersetzt, wenn eine Shell-Funktion ausgeführt wird (siehe FUNKTIONEN unten).

Wenn ein Positionsparameter, der aus mehr als einer einzelnen Ziffer besteht, erweitert wird, muss er in geschweifte Klammern eingeschlossen werden (siehe ERWEITERUNG unten).

Spezielle Parameter

Die Shell behandelt mehrere Parameter speziell. Auf diese Parameter darf nur verwiesen werden; Eine Zuordnung zu ihnen ist nicht zulässig.

*

Erweitert auf die Positionsparameter, beginnend bei eins. Wenn die Erweiterung nicht in doppelten Anführungszeichen steht, wird jeder Positionsparameter zu einem separaten Wort erweitert. In Kontexten, in denen es ausgeführt wird, unterliegen diese Wörter einer weiteren Wortaufteilung und Pfadnamenerweiterung. Wenn die Erweiterung in doppelten Anführungszeichen erfolgt, wird sie zu einem einzelnen Wort erweitert, wobei der Wert jedes Parameters durch das erste Zeichen der speziellen Variablen IFS getrennt wird. Das heißt, „$*“ entspricht „$1c$2c ...“, wobei c das erste Zeichen des Werts der IFS-Variable ist. Wenn IFS nicht gesetzt ist, werden die Parameter durch Leerzeichen getrennt. Wenn IFS null ist, werden die Parameter ohne dazwischenliegende Trennzeichen zusammengefügt.

@

Erweitert auf die Positionsparameter, beginnend bei eins. In Kontexten, in denen eine Wortaufteilung durchgeführt wird, wird dadurch jeder Positionsparameter auf ein separates Wort erweitert; Wenn diese Wörter nicht in doppelte Anführungszeichen gesetzt werden, unterliegen sie einer Wortaufteilung. In Kontexten, in denen keine Wortaufteilung durchgeführt wird, wird dies zu einem einzelnen Wort erweitert, wobei jeder Positionsparameter durch ein Leerzeichen getrennt ist. Wenn die Erweiterung in doppelten Anführungszeichen erfolgt, wird jeder Parameter zu einem separaten Wort erweitert. Das heißt, „$@“ entspricht „$1“ „$2“ ... Wenn die Erweiterung in doppelte Anführungszeichen innerhalb eines Wortes auftritt , wird die Erweiterung des ersten Parameters mit dem Anfangsteil des Originalworts verbunden, und die Erweiterung des letzten Parameters wird mit dem letzten Teil des Originalworts verbunden. Wenn keine Positionsparameter vorhanden sind, werden „$@“ und $@ zu nichts erweitert (d. h. sie werden entfernt).

#

Erweitert die Anzahl der Positionsparameter im Dezimalformat.

?

Erweitert den Exit-Status der zuletzt ausgeführten Vordergrundpipeline.

-

Erweitert sich auf die aktuellen Optionsflags, die beim Aufruf durch den integrierten Befehl set oder durch die Shell selbst festgelegt wurden (z. B. die Option -i).

$

Erweitert sich auf die Prozess-ID der Shell. In einer()-Subshell wird es auf die Prozess-ID der aktuellen Shell erweitert, nicht auf die Subshell.

!

Erweitert sich auf die Prozess-ID des Jobs, der zuletzt im Hintergrund platziert wurde, unabhängig davon, ob er als asynchroner Befehl oder unter Verwendung des integrierten bg-Befehls ausgeführt wird (siehe JOB-STEUERUNG unten).

0

Wird auf den Namen der Shell oder des Shell-Skripts erweitert. Dies wird bei der Shell-Initialisierung festgelegt. Wenn bash mit einer Befehlsdatei aufgerufen wird, wird $0 auf den Namen dieser Datei gesetzt. Wenn bash mit der Option -c gestartet wird, wird $0 auf das erste Argument nach der auszuführenden Zeichenfolge gesetzt, sofern eines vorhanden ist . Andernfalls wird es auf den Dateinamen gesetzt, der zum Aufrufen von bash verwendet wird, wie durch Argument Null angegeben.

Shell-Variablen

Die folgenden Variablen werden von der Shell gesetzt:

_

Legen Sie beim Shell-Start den Pfadnamen fest, der zum Aufrufen der Shell oder des auszuführenden Shell-Skripts verwendet wird, wie in der Umgebung oder Argumentliste übergeben. Anschließend wird der vorherige einfache Befehl, der nach der Erweiterung im Vordergrund ausgeführt wurde, bis zum letzten Argument erweitert. Legen Sie außerdem den vollständigen Pfadnamen fest, der zum Aufrufen jedes ausgeführten Befehls verwendet und in der für diesen Befehl exportierten Umgebung platziert wird. Beim Überprüfen von E-Mails enthält dieser Parameter den Namen der E-Mail-Datei, die gerade überprüft wird.

BASH

Erweitert sich auf den vollständigen Dateinamen, der zum Aufrufen dieser Instanz von bash verwendet wird.

BASHOPTS

Eine durch Doppelpunkte getrennte Liste aktivierter Shell-Optionen. Jedes Wort in der Liste ist ein gültiges Argument für die Option -s des integrierten Befehls shopt (siehe BUILTIN-BEFEHLE VON SHELL unten). Die in BASHOPTS angezeigten Optionen sind diejenigen, die von shopt als on gemeldet wurden. Wenn sich diese Variable beim Start von bash in der Umgebung befindet, wird jede Shell-Option in der Liste aktiviert, bevor Startdateien gelesen werden. Diese Variable ist schreibgeschützt.

BASHPID

Erweitert sich auf die Prozess-ID des aktuellen bash-Prozesses. Dies unterscheidet sich unter bestimmten Umständen von $$, z. B. bei Subshells, die keine Neuinitialisierung von bash erfordern. Zuweisungen an BASHPID haben keine Auswirkung. Wenn BASHPID nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

BASH_ALIASES

Eine assoziative Array-Variable, deren Mitglieder der internen Liste von Aliasen entsprechen, die vom integrierten Alias verwaltet wird. Zu diesem Array hinzugefügte Elemente erscheinen in der Alias-Liste; Allerdings führt das Aufheben der Festlegung von Array-Elementen derzeit nicht dazu, dass Aliase aus der Alias-Liste entfernt werden. Wenn BASH_ALIASES nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

BASH_ARGC

Eine Array-Variable, deren Werte die Anzahl der Parameter in jedem Frame des aktuellen bash-Ausführungsaufrufstapels sind. Die Anzahl der Parameter für die aktuelle Unterroutine (Shell-Funktion oder Skript, das mit . oder source ausgeführt wird) befindet sich oben im Stapel. Wenn eine Unterroutine ausgeführt wird, wird die Anzahl der übergebenen Parameter auf BASH_ARGC übertragen. Die Shell setzt BASH_ARGC nur im erweiterten Debugging-Modus (siehe die Beschreibung der extdebug-Option für das shopt-Built-In unten). Das Setzen von extdebug, nachdem die Shell mit der Ausführung eines Skripts begonnen hat, oder das Verweisen auf diese Variable, wenn extdebug nicht gesetzt ist, kann zu inkonsistenten Werten führen.

BASH_ARGV

Eine Array-Variable, die alle Parameter im aktuellen bash-Ausführungsaufrufstapel enthält. Der letzte Parameter des letzten Unterprogrammaufrufs befindet sich oben im Stapel. Der erste Parameter des ersten Aufrufs befindet sich unten. Wenn eine Unterroutine ausgeführt wird, werden die bereitgestellten Parameter auf BASH_ARGV übertragen. Die Shell setzt BASH_ARGV nur im erweiterten Debugging-Modus (siehe die Beschreibung der extdebug-Option für das shopt-Built-In unten). Das Setzen von extdebug, nachdem die Shell mit der Ausführung eines Skripts begonnen hat, oder das Verweisen auf diese Variable, wenn extdebug nicht gesetzt ist, kann zu inkonsistenten Werten führen.

BASH_ARGV0

Bei Referenzierung wird diese Variable zum Namen der Shell oder des Shell-Skripts erweitert (identisch mit $0; siehe Beschreibung des speziellen Parameters 0 oben). Die Zuweisung zu BASH_ARGV0 führt dazu, dass der zugewiesene Wert auch zu $0 zugewiesen wird. Wenn BASH_ARGV0 nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

BASH_CMDS

Eine assoziative Array-Variable, deren Mitglieder der internen Hash-Tabelle der Befehle entsprechen, die vom integrierten Hash verwaltet wird. Zu diesem Array hinzugefügte Elemente erscheinen in der Hash-Tabelle; Allerdings führt das Aufheben der Festlegung von Array-Elementen derzeit nicht dazu, dass Befehlsnamen aus der Hash-Tabelle entfernt werden. Wenn BASH_CMDS nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

BASH_COMMAND

Der Befehl, der gerade ausgeführt wird oder kurz vor der Ausführung steht, es sei denn, die Shell führt einen Befehl als Ergebnis einer Falle aus. In diesem Fall handelt es sich um den Befehl, der zum Zeitpunkt der Falle ausgeführt wird. Wenn BASH_COMMAND nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

BASH_EXECUTION_STRING

Das Befehlsargument für die Aufrufoption -c.

BASH_LINENO

Eine Array-Variable, deren Mitglieder die Zeilennummern in Quelldateien sind, in denen jedes entsprechende Mitglied von FUNCNAME aufgerufen wurde. $ {BASH_LINENO[$i]} ist die Zeilennummer in der Quelldatei ($ {BASH_SOURCE[<$i+1]}), wobei $ {FUNCNAME[$i ]} wurde aufgerufen (oder $ {BASH_LINENO[$i-1]}, wenn innerhalb einer anderen Shell-Funktion referenziert wurde) . Verwenden Sie LINENO, um die aktuelle Zeilennummer zu erhalten.

BASH_LOADABLES_PATH

Eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen die Shell nach dynamisch ladbaren integrierten Dateien sucht, die durch den Befehl enable angegeben werden.

BASH_REMATCH

Eine Array-Variable, deren Mitglieder durch den binären Operator =~ dem bedingten Befehl [[] zugewiesen werden. Das Element mit Index 0 ist der Teil der Zeichenfolge, der mit dem gesamten regulären Ausdruck übereinstimmt. Das Element mit dem Index n ist der Teil der Zeichenfolge, der mit dem nten Teilausdruck in Klammern übereinstimmt.

BASH_SOURCE

Eine Array-Variable, deren Mitglieder die Quelldateinamen sind, in denen die entsprechenden Shell-Funktionsnamen in der Array-Variable FUNCNAME definiert sind. Die Shell-Funktion $ {FUNCNAME[$i]} ist in der Datei $ {BASH_SOURCE[$i]} und aufgerufen von $ {BASH_SOURCE[$i+1 ].

BASH_SUBSHELL

Wird innerhalb jeder Subshell oder Subshell-Umgebung um eins erhöht, wenn die Shell in dieser Umgebung mit der Ausführung beginnt. Der Anfangswert ist 0. Wenn BASH_SUBSHELL nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

BASH_VERSINFO

Eine schreibgeschützte Array-Variable, deren Mitglieder Versionsinformationen für diese Instanz von bash enthalten. Die den Array-Mitgliedern zugewiesenen Werte lauten wie folgt:

BASH_VERSINFO[0]

Die Hauptversionsnummer (das Release).

BASH_VERSINFO[1]

Die Nebenversionsnummer (die Version).

BASH_VERSINFO[2]

Der Patch-Level.

BASH_VERSINFO[3]

Die Build-Version.

BASH_VERSINFO[4]

Der Veröffentlichungsstatus (z. B. beta1).

BASH_VERSINFO[5]

Der Wert von MACHTYPE.

BASH_VERSION

Wird zu einer Zeichenfolge erweitert, die die Version dieser Instanz von bash beschreibt.

COMP_CWORD

Ein Index in $ {COMP_WORDS} des Wortes, das die aktuelle Cursorposition enthält. Diese Variable ist nur in Shell-Funktionen verfügbar, die von den programmierbaren Vervollständigungsfunktionen aufgerufen werden (siehe Programmierbare Vervollständigung unten).

COMP_KEY

Der Schlüssel (oder Endschlüssel einer Tastenfolge), der zum Aufrufen der aktuellen Vervollständigungsfunktion verwendet wird.

COMP_LINE

Die aktuelle Befehlszeile. Diese Variable ist nur in Shell-Funktionen und externen Befehlen verfügbar, die von den programmierbaren Vervollständigungsfunktionen aufgerufen werden (siehe Programmierbare Vervollständigung unten).

COMP_POINT

Der Index der aktuellen Cursorposition relativ zum Anfang des aktuellen Befehls. Wenn sich die aktuelle Cursorposition am Ende des aktuellen Befehls befindet, ist der Wert dieser Variablen gleich $ {#COMP_LINE}. Diese Variable ist nur in Shell-Funktionen und externen Befehlen verfügbar, die von den programmierbaren Vervollständigungsfunktionen aufgerufen werden (siehe Programmierbare Vervollständigung unten).

COMP_TYPE

Wird auf einen ganzzahligen Wert gesetzt, der dem Typ des Vervollständigungsversuchs entspricht, der den Aufruf einer Vervollständigungsfunktion verursacht hat: TAB, für normale Vervollständigung, ?, für die Auflistung von Vervollständigungen nach aufeinanderfolgenden Tabulatoren, !, um Alternativen bei teilweiser Wortvervollständigung aufzulisten, @, um Vervollständigungen aufzulisten, wenn das Wort nicht unverändert ist, oder %, für die Menüvervollständigung. Diese Variable ist nur in Shell-Funktionen und externen Befehlen verfügbar, die von den programmierbaren Vervollständigungsfunktionen aufgerufen werden (siehe Programmierbare Vervollständigung unten).

COMP_WORDBREAKS

Der Satz von Zeichen, die die readline-Bibliothek bei der Wortvervollständigung als Worttrennzeichen behandelt. Wenn COMP_WORDBREAKS nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

COMP_WORDS

Eine Array-Variable (siehe Arrays unten), die aus den einzelnen Wörtern in der aktuellen Befehlszeile besteht. Die Zeile wird in Wörter aufgeteilt, so wie readline sie aufteilen würde, indem COMP_WORDBREAKS wie oben beschrieben verwendet wird. Diese Variable ist nur in Shell-Funktionen verfügbar, die von den programmierbaren Vervollständigungsfunktionen aufgerufen werden (siehe Programmierbare Vervollständigung unten).

COPROC

Eine Array-Variable (siehe Arrays unten), die erstellt wurde, um die Dateideskriptoren für die Ausgabe von und die Eingabe in einen unbenannten Coprozess zu speichern (siehe Coprozesse oben).

DIRSTACK

Eine Array-Variable (siehe Arrays unten), die den aktuellen Inhalt des Verzeichnisstapels enthält. Verzeichnisse werden im Stapel in der Reihenfolge angezeigt, in der sie durch die integrierten Verzeichnisse angezeigt werden. Die Zuweisung an Mitglieder dieser Array-Variablen kann zum Ändern bereits im Stapel vorhandener Verzeichnisse verwendet werden, zum Hinzufügen und Entfernen von Verzeichnissen müssen jedoch die integrierten Funktionen pushd und popd verwendet werden. Durch die Zuweisung zu dieser Variablen wird das aktuelle Verzeichnis nicht geändert. Wenn DIRSTACK nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

EPOCHREALTIME

Jedes Mal, wenn auf diesen Parameter verwiesen wird, wird er auf die Anzahl der Sekunden seit der Unix-Epoche (siehe time(3)) als Gleitkommawert mit Mikrosekunden-Granularität erweitert. Zuweisungen zu EPOCHREALTIME werden ignoriert. Wenn EPOCHREALTIME nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

EPOCHSECONDS

Jedes Mal, wenn auf diesen Parameter verwiesen wird, wird er um die Anzahl der Sekunden seit der Unix-Epoche erweitert (siehe time(3)). Zuweisungen zu EPOCHSECONDS werden ignoriert. Wenn EPOCHSECONDS nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

EUID

Erweitert sich auf die effektive Benutzer-ID des aktuellen Benutzers, die beim Shell-Start initialisiert wird. Diese Variable ist schreibgeschützt.

FUNCNAME

Eine Array-Variable, die die Namen aller Shell-Funktionen enthält, die sich derzeit im Ausführungsaufrufstapel befinden. Das Element mit Index 0 ist der Name einer beliebigen aktuell ausgeführten Shell-Funktion. Das unterste Element (das mit dem höchsten Index) ist „main“. Diese Variable existiert nur, wenn eine Shell-Funktion ausgeführt wird. Zuweisungen zu FUNCNAME haben keine Auswirkung. Wenn FUNCNAME nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

Diese Variable kann mit BASH_LINENO und BASH_SOURCE verwendet werden. Jedes Element von FUNCNAME verfügt über entsprechende Elemente in BASH_LINENO und BASH_SOURCE, um den Aufrufstapel zu beschreiben. Beispielsweise wurde $ {FUNCNAME[$i]} aus der Datei $ {BASH_SOURCE[$i+1]} in Zeilennummer $ {BASH_LINENO[$i ]. Der integrierte Aufrufer zeigt anhand dieser Informationen den aktuellen Aufrufstapel an.

GROUPS

Eine Array-Variable, die die Liste der Gruppen enthält, in denen der aktuelle Benutzer Mitglied ist. Zuweisungen zu GROUPS haben keine Auswirkung. Wenn GROUPS nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es später zurückgesetzt wird.

HISTCMD

Die Verlaufsnummer oder der Index in der Verlaufsliste des aktuellen Befehls. Zuweisungen zu HISTCMD werden ignoriert. Wenn HISTCMD nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

HOSTNAME

Wird automatisch auf den Namen des aktuellen Hosts gesetzt.

HOSTTYPE

Wird automatisch auf eine Zeichenfolge gesetzt, die den Maschinentyp, auf dem bash ausgeführt wird, eindeutig beschreibt. Die Standardeinstellung ist systemabhängig.

LINENO

Jedes Mal, wenn auf diesen Parameter verwiesen wird, ersetzt die Shell eine Dezimalzahl, die die aktuelle fortlaufende Zeilennummer (beginnend mit 1) innerhalb eines Skripts oder einer Funktion darstellt. Wenn der Wert nicht in einem Skript oder einer Funktion enthalten ist, kann nicht garantiert werden, dass er sinnvoll ist. Wenn LINENO nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es später zurückgesetzt wird.

MACHTYPE

Wird automatisch auf eine Zeichenfolge gesetzt, die den Systemtyp, auf dem bash ausgeführt wird, im Standard-GNU-cpu-company-system-Format vollständig beschreibt. Die Standardeinstellung ist systemabhängig.

MAPFILE

Eine Array-Variable (siehe Arrays unten), die erstellt wird, um den von der integrierten Mapfile gelesenen Text zu speichern, wenn kein Variablenname angegeben wird.

OLDPWD

Das vorherige Arbeitsverzeichnis, wie durch den Befehl cd festgelegt.

OPTARG

Der Wert des letzten Optionsarguments, das vom integrierten Befehl getopts verarbeitet wird (siehe BUILTIN-BEFEHLE VON SHELL unten).

OPTIND

Der Index des nächsten Arguments, das vom integrierten Befehl getopts verarbeitet werden soll (siehe BUILTIN-BEFEHLE VON SHELL unten).

OSTYPE

Wird automatisch auf eine Zeichenfolge gesetzt, die das Betriebssystem beschreibt, auf dem bash ausgeführt wird. Die Standardeinstellung ist systemabhängig.

PIPESTATUS

Eine Array-Variable (siehe Arrays unten), die eine Liste der Exit-Statuswerte der Prozesse in der zuletzt ausgeführten Vordergrundpipeline enthält (die möglicherweise nur einen einzigen Befehl enthält).

PPID

Die Prozess-ID des übergeordneten Shells. Diese Variable ist schreibgeschützt.

PWD

Das aktuelle Arbeitsverzeichnis, wie durch den Befehl cd festgelegt.

RANDOM

Jedes Mal, wenn auf diesen Parameter verwiesen wird, wird er zu einer zufälligen Ganzzahl zwischen 0 und 32767 erweitert. Durch die Zuweisung eines Werts zu RANDOM wird die Folge von Zufallszahlen initialisiert (gesetzt). Wenn RANDOM nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es später zurückgesetzt wird.

READLINE_LINE

Der Inhalt des readline-Zeilenpuffers zur Verwendung mit „bind -x“ (siehe SHELL BUILTIN COMMANDS unten).

READLINE_MARK

Die Position der Markierung (gespeicherter Einfügepunkt) im readline-Zeilenpuffer zur Verwendung mit „bind -x“ (siehe SHELL BUILTIN COMMANDS unten). Die Zeichen zwischen der Einfügemarke und der Markierung werden oft als Bereich bezeichnet.

READLINE_POINT

Die Position des Einfügepunkts im readline-Zeilenpuffer zur Verwendung mit „bind -x“ (siehe SHELL BUILTIN COMMANDS unten).

REPLY

Wird auf die Eingabezeile gesetzt, die vom integrierten Befehl read gelesen wird, wenn keine Argumente angegeben werden.

SECONDS

Bei jedem Verweis auf diesen Parameter wird die Anzahl der Sekunden seit dem Shell-Aufruf zurückgegeben. Wenn SECONDS ein Wert zugewiesen wird, ist der bei nachfolgenden Verweisen zurückgegebene Wert die Anzahl der Sekunden seit der Zuweisung plus dem zugewiesenen Wert. Die Anzahl der Sekunden beim Shell-Aufruf und die aktuelle Uhrzeit werden immer durch Abfrage der Systemuhr ermittelt. Wenn SECONDS nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

SHELLOPTS

Eine durch Doppelpunkte getrennte Liste aktivierter Shell-Optionen. Jedes Wort in der Liste ist ein gültiges Argument für die Option -o des integrierten Befehls set (siehe BUILTIN-BEFEHLE VON SHELL unten). Die in SHELLOPTS angezeigten Optionen sind diejenigen, die von set -o als on gemeldet werden. Wenn sich diese Variable beim Start von bash in der Umgebung befindet, wird jede Shell-Option in der Liste aktiviert, bevor Startdateien gelesen werden. Diese Variable ist schreibgeschützt.

SHLVL

Wird jedes Mal um eins erhöht, wenn eine Instanz von bash gestartet wird.

SRANDOM

Diese Variable wird bei jedem Verweis auf eine 32-Bit-Pseudozufallszahl erweitert. Der Zufallszahlengenerator ist auf Systemen, die /dev/urandom oder arc4random unterstützen, nicht linear, sodass jede zurückgegebene Zahl keine Beziehung zu den Zahlen davor hat. Der Zufallszahlengenerator kann nicht gesät werden, daher haben Zuweisungen an diese Variable keine Auswirkung. Wenn SRANDOM nicht gesetzt ist, verliert es seine besonderen Eigenschaften, auch wenn es anschließend zurückgesetzt wird.

UID

Erweitert sich auf die Benutzer-ID des aktuellen Benutzers, die beim Shell-Start initialisiert wird. Diese Variable ist schreibgeschützt.

Die folgenden Variablen werden von der Shell verwendet. In einigen Fällen weist bash einer Variablen einen Standardwert zu; Diese Fälle sind unten aufgeführt.

BASH_COMPAT

Der Wert wird verwendet, um den Kompatibilitätsgrad der Shell festzulegen. Eine Beschreibung der verschiedenen Kompatibilitätsstufen und ihrer Auswirkungen finden Sie unten im Abschnitt SHELL-KOMPATIBILITÄTSMODUS. Der Wert kann eine Dezimalzahl (z. B. 4,2) oder eine Ganzzahl (z. B. 42) sein, die dem gewünschten Kompatibilitätsgrad entspricht. Wenn BASH_COMPAT nicht gesetzt oder auf die leere Zeichenfolge gesetzt ist, wird der Kompatibilitätsgrad auf den Standardwert für die aktuelle Version gesetzt. Wenn BASH_COMPAT auf einen Wert gesetzt ist, der keiner der gültigen Kompatibilitätsstufen ist, gibt die Shell eine Fehlermeldung aus und setzt die Kompatibilitätsstufe auf den Standardwert für die aktuelle Version. Die gültigen Werte entsprechen den unten beschriebenen Kompatibilitätsstufen

BSHELLKOMPATIBILITÄTSMODUS. Beispielsweise sind 4.2 und 42 gültige Werte, die der Option compat42 shopt entsprechen und den Kompatibilitätsgrad auf 42 festlegen. Die aktuelle Version ist ebenfalls ein gültiger Wert.

BASH_ENV

Wenn dieser Parameter gesetzt ist, während bash ein Shell-Skript ausführt, wird sein Wert als Dateiname interpretiert, der Befehle zum Initialisieren der Shell enthält, wie in ~/.bashrc. Der Wert von BASH_ENV wird einer Parametererweiterung, Befehlsersetzung und arithmetischen Erweiterung unterzogen, bevor er als Dateiname interpretiert wird.

PATH wird nicht verwendet, um nach dem resultierenden Dateinamen zu suchen.

BASH_XTRACEFD

Wenn bash auf eine ganze Zahl gesetzt ist, die einem gültigen Dateideskriptor entspricht, schreibt bash die Trace-Ausgabe, die generiert wird, wenn set -x aktiviert ist, in diesen Dateideskriptor. Der Dateideskriptor wird geschlossen, wenn BASH_XTRACEFD deaktiviert oder ein neuer Wert zugewiesen wird. Wenn Sie BASH_XTRACEFD deaktivieren oder ihm die leere Zeichenfolge zuweisen, wird die Trace-Ausgabe an den Standardfehler gesendet. Beachten Sie, dass das Setzen von BASH_XTRACEFD auf 2 (der Standardfehlerdateideskriptor) und das anschließende Deaktivieren dazu führt, dass der Standardfehler geschlossen wird.

CDPATH

Der Suchpfad für den Befehl cd. Dies ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in der die Shell nach Zielverzeichnissen sucht, die durch den Befehl cd angegeben werden. Ein Beispielwert ist „.:~:/usr“.

CHILD_MAX

Legen Sie die Anzahl der beendeten untergeordneten Statuswerte fest, die von der Shell gespeichert werden sollen. Bash lässt nicht zu, dass dieser Wert unter einen von POSIX vorgeschriebenen Mindestwert gesenkt wird, und es gibt einen Höchstwert (derzeit 8192), den dieser Wert nicht überschreiten darf. Der Mindestwert ist systemabhängig.

COLUMNS

Wird vom Befehl select Compound verwendet, um die Terminalbreite beim Drucken von Auswahllisten zu bestimmen. Wird automatisch festgelegt, wenn die Option checkwinsize aktiviert ist, oder in einer interaktiven Shell beim Empfang eines SIGWINCH.

COMPREPLY

Eine Array-Variable, aus der bash die möglichen Vervollständigungen liest, die von einer Shell-Funktion generiert werden, die von der programmierbaren Vervollständigungsfunktion aufgerufen wird (siehe Programmierbare Vervollständigung unten). Jedes Array-Element enthält eine mögliche Vervollständigung.

EMACS

Wenn bash diese Variable in der Umgebung findet, wenn die Shell mit dem Wert „t“ startet, geht sie davon aus, dass die Shell in einem Emacs-Shell-Puffer ausgeführt wird, und deaktiviert die Zeilenbearbeitung.

ENV

Wird ähnlich wie BASH_ENV (siehe INVOCATION oben) erweitert und ausgeführt, wenn eine interaktive Shell im Posix-Modus aufgerufen wird.

EXECIGNORE

Eine durch Doppelpunkte getrennte Liste von Shell-Mustern (siehe Pattern Matching), die die Liste der Dateinamen definiert, die von der Befehlssuche mit PATH ignoriert werden sollen. Dateien, deren vollständige Pfadnamen mit einem dieser Muster übereinstimmen, gelten zum Zwecke der Vervollständigung und Befehlsausführung über die PATH-Suche nicht als ausführbare Dateien. Dies hat keinen Einfluss auf das Verhalten der Befehle [, test und [[]. Vollständige Pfadnamen in der Befehls-Hash-Tabelle unterliegen nicht EXECIGNORE. Verwenden Sie diese Variable, um gemeinsam genutzte Bibliotheksdateien zu ignorieren, bei denen das ausführbare Bit gesetzt ist, die aber keine ausführbaren Dateien sind. Der Mustervergleich berücksichtigt die Einstellung der Shell-Option extglob.

FCEDIT

Der Standardeditor für den integrierten Befehl fc.

FIGNORE

Eine durch Doppelpunkte getrennte Liste von Suffixen, die bei der Dateinamenvervollständigung ignoriert werden sollen (siehe READLINE unten). Ein Dateiname, dessen Suffix mit einem der Einträge in FIGNORE übereinstimmt, wird aus der Liste der übereinstimmenden Dateinamen ausgeschlossen. Ein Beispielwert ist „.o:~“.

FUNCNEST

Wenn es auf einen numerischen Wert größer als 0 festgelegt ist, wird eine maximale Verschachtelungsebene der Funktion definiert. Funktionsaufrufe, die diese Verschachtelungsebene überschreiten, führen zum Abbruch des aktuellen Befehls.

GLOBIGNORE

Eine durch Doppelpunkte getrennte Liste von Mustern, die den Satz von Dateinamen definieren, die bei der Pfadnamenerweiterung ignoriert werden sollen. Wenn ein Dateiname, der mit einem Pfadnamenerweiterungsmuster übereinstimmt, auch mit einem der Muster in GLOBIGNORE übereinstimmt, wird er aus der Trefferliste entfernt.

HISTCONTROL

Eine durch Doppelpunkte getrennte Liste von Werten, die steuern, wie Befehle in der Verlaufsliste gespeichert werden. Wenn die Werteliste ignorespace enthält, werden Zeilen, die mit einem Leerzeichen beginnen, nicht in der Verlaufsliste gespeichert. Der Wert ignoredups führt dazu, dass Zeilen, die mit dem vorherigen Verlaufseintrag übereinstimmen, nicht gespeichert werden. Der Wert ignoreboth ist eine Abkürzung für ignorespace und ignoredups. Der Wert erasedups bewirkt, dass alle vorherigen Zeilen, die mit der aktuellen Zeile übereinstimmen, aus der Verlaufsliste entfernt werden, bevor diese Zeile gespeichert wird. Jeder Wert, der nicht in der obigen Liste enthalten ist, wird ignoriert. Wenn HISTCONTROL nicht gesetzt ist oder keinen gültigen Wert enthält, werden alle vom Shell-Parser gelesenen Zeilen in der Verlaufsliste gespeichert, abhängig vom Wert von HISTIGNORE. Die zweite und die folgenden Zeilen eines mehrzeiligen zusammengesetzten Befehls werden nicht getestet und dem Verlauf hinzugefügt, unabhängig vom Wert von HISTCONTROL.

HISTFILE

Der Name der Datei, in der der Befehlsverlauf gespeichert wird (siehe VERLAUF unten). Der Standardwert ist ~/.bash_history. Wenn diese Option nicht festgelegt ist, wird der Befehlsverlauf beim Beenden einer Shell nicht gespeichert.

HISTFILESIZE

Die maximale Anzahl der in der Verlaufsdatei enthaltenen Zeilen. Wenn dieser Variablen ein Wert zugewiesen wird, wird die Verlaufsdatei bei Bedarf gekürzt, sodass sie nicht mehr als diese Anzahl an Zeilen enthält, indem die ältesten Einträge entfernt werden. Auch die Verlaufsdatei wird nach dem Schreiben beim Beenden einer Shell auf diese Größe gekürzt. Wenn der Wert 0 ist, wird die Verlaufsdatei auf die Größe Null gekürzt. Nicht numerische Werte und numerische Werte kleiner als Null verhindern das Abschneiden. Die Shell setzt den Standardwert auf den Wert von HISTSIZE, nachdem alle Startdateien gelesen wurden.

HISTIGNORE

Eine durch Doppelpunkte getrennte Liste von Mustern, mit denen entschieden wird, welche Befehlszeilen in der Verlaufsliste gespeichert werden sollen. Jedes Muster ist am Anfang der Zeile verankert und muss mit der gesamten Zeile übereinstimmen (es wird kein implizites „*“ angehängt). Jedes Muster wird anhand der Zeile getestet, nachdem die von HISTCONTROL angegebenen Prüfungen angewendet wurden. Zusätzlich zu den normalen Shell-Muster-Übereinstimmungszeichen stimmt „&“ mit der vorherigen Verlaufszeile überein. „&“ kann mit einem Backslash maskiert werden; Der Backslash wird entfernt, bevor eine Übereinstimmung versucht wird. Die zweite und die folgenden Zeilen eines mehrzeiligen zusammengesetzten Befehls werden nicht getestet und dem Verlauf hinzugefügt, unabhängig vom Wert von HISTIGNORE. Der Mustervergleich berücksichtigt die Einstellung der Shell-Option extglob.

HISTSIZE

Die Anzahl der Befehle, die im Befehlsverlauf gespeichert werden sollen (siehe VERLAUF unten). Wenn der Wert 0 ist, werden Befehle nicht in der Verlaufsliste gespeichert. Numerische Werte kleiner als Null führen dazu, dass jeder Befehl in der Verlaufsliste gespeichert wird (es gibt keine Begrenzung). Die Shell setzt den Standardwert auf 500, nachdem alle Startdateien gelesen wurden.

HISTTIMEFORMAT

Wenn diese Variable gesetzt und nicht null ist, wird ihr Wert als Formatzeichenfolge für strftime(3) verwendet, um den Zeitstempel zu drucken, der jedem vom history angezeigten Verlaufseintrag zugeordnet ist eingebaut. Wenn diese Variable festgelegt ist, werden Zeitstempel in die Verlaufsdatei geschrieben, damit sie über Shell-Sitzungen hinweg erhalten bleiben können. Dabei wird das Verlaufskommentarzeichen verwendet, um Zeitstempel von anderen Verlaufszeilen zu unterscheiden.

HOME

Das Home-Verzeichnis des aktuellen Benutzers; das Standardargument für den integrierten Befehl cd. Der Wert dieser Variablen wird auch bei der Tilde-Erweiterung verwendet.

HOSTFILE

Enthält den Namen einer Datei im gleichen Format wie  /etc/hosts , die gelesen werden soll, wenn die Shell einen Hostnamen vervollständigen muss. Die Liste möglicher Hostnamen-Vervollständigungen kann geändert werden, während die Shell ausgeführt wird. Beim nächsten Versuch, den Hostnamen zu vervollständigen, nachdem der Wert geändert wurde, fügt bash den Inhalt der neuen Datei zur vorhandenen Liste hinzu. Wenn HOSTFILE festgelegt ist, aber keinen Wert hat oder keine lesbare Datei benennt, versucht bash,  /etc/hosts  zu lesen, um die Datei zu erhalten Liste möglicher Hostnamen-Vervollständigungen. Wenn HOSTFILE nicht festgelegt ist, wird die Hostnamenliste gelöscht.

IFS

Das Interne Feldtrennzeichen, das für die Wortaufteilung nach der Erweiterung und zum Aufteilen von Zeilen in Wörter mit dem integrierten Befehl read verwendet wird. Der Standardwert ist „“.

IGNOREEOF

Steuert die Aktion einer interaktiven Shell beim Empfang eines EOF-Zeichens als einzige Eingabe. Wenn festgelegt, ist der Wert die Anzahl aufeinanderfolgender EOF-Zeichen, die als erste Zeichen in einer Eingabezeile eingegeben werden müssen, bevor bash beendet wird. Wenn die Variable existiert, aber keinen numerischen Wert hat oder keinen Wert hat, ist der Standardwert 10. Wenn sie nicht existiert, bedeutet EOF das Ende der Eingabe in die Shell.

INPUTRC

Der Dateiname für die Startdatei readline, der den Standardwert  ~/.inputrc  überschreibt (siehe READLINE unten).

INSIDE_EMACS

Wenn diese Variable beim Start der Shell in der Umgebung erscheint, geht bash davon aus, dass sie in einem Emacs-Shell-Puffer ausgeführt wird, und deaktiviert möglicherweise die Zeilenbearbeitung, abhängig vom Wert von TERM.

LANG

Wird verwendet, um die Gebietsschemakategorie für jede Kategorie zu bestimmen, die nicht speziell mit einer Variablen ausgewählt wurde, die mit LC_ beginnt.

LC_ALL

Diese Variable überschreibt den Wert von LANG und jeder anderen LC_-Variable, die eine Gebietsschemakategorie angibt.

LC_COLLATE

Diese Variable bestimmt die Sortierreihenfolge, die beim Sortieren der Ergebnisse der Pfadnamenerweiterung verwendet wird, und bestimmt das Verhalten von Bereichsausdrücken, Äquivalenzklassen und Sortiersequenzen bei der Pfadnamenerweiterung und dem Mustervergleich.

LC_CTYPE

Diese Variable bestimmt die Interpretation von Zeichen und das Verhalten von Zeichenklassen bei der Pfadnamenerweiterung und dem Mustervergleich.

LC_MESSAGES

Diese Variable bestimmt das Gebietsschema, das zum Übersetzen von Zeichenfolgen in doppelten Anführungszeichen verwendet wird, denen ein $ vorangestellt ist.

LC_NUMERIC

Diese Variable bestimmt die Gebietsschemakategorie, die für die Zahlenformatierung verwendet wird.

LC_TIME

Diese Variable bestimmt die Gebietsschemakategorie, die für die Daten- und Zeitformatierung verwendet wird.

LINES

Wird vom Befehl select Compound verwendet, um die Spaltenlänge zum Drucken von Auswahllisten zu bestimmen. Wird automatisch festgelegt, wenn die Option checkwinsize aktiviert ist, oder in einer interaktiven Shell beim Empfang eines SIGWINCH.

MAIL

Wenn dieser Parameter auf einen Datei- oder Verzeichnisnamen gesetzt ist und die Variable MAILPATH nicht gesetzt ist, informiert bash den Benutzer über den Eingang von E-Mails in der angegebenen Datei oder im Maildir-Format Verzeichnis.

MAILCHECK

Gibt an, wie oft (in Sekunden) bash nach E-Mails sucht. Der Standardwert beträgt 60 Sekunden. Wenn es Zeit ist, nach E-Mails zu suchen, führt die Shell dies durch, bevor die primäre Eingabeaufforderung angezeigt wird. Wenn diese Variable nicht gesetzt ist oder auf einen Wert gesetzt ist, der keine Zahl größer oder gleich Null ist, deaktiviert die Shell die E-Mail-Überprüfung.

MAILPATH

Eine durch Doppelpunkte getrennte Liste von Dateinamen, die auf E-Mails überprüft werden sollen. Die Nachricht, die gedruckt werden soll, wenn E-Mails in einer bestimmten Datei eintreffen, kann angegeben werden, indem der Dateiname durch ein „?“ von der Nachricht getrennt wird. Bei Verwendung im Text der Nachricht wird $_ auf den Namen der aktuellen Maildatei erweitert. Beispiel:

MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'

Bash kann so konfiguriert werden, dass es einen Standardwert für diese Variable bereitstellt (standardmäßig gibt es keinen Wert), aber der Speicherort der Benutzer-Maildateien, die es verwendet, ist systemabhängig (z. B. ).

/var/mail/$USER
OPTERR

Wenn der Wert auf 1 gesetzt ist, zeigt bash Fehlermeldungen an, die vom integrierten Befehl getopts generiert wurden (siehe BUILTIN-BEFEHLE VON SHELL unten).

OPTERR wird jedes Mal auf 1 initialisiert, wenn die Shell aufgerufen oder ein Shell-Skript ausgeführt wird.

PATH

Der Suchpfad für Befehle. Es handelt sich um eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen die Shell nach Befehlen sucht (siehe BEFEHLSAUSFÜHRUNG unten). Ein Verzeichnisname der Länge Null (Null) im Wert von PATH gibt das aktuelle Verzeichnis an. Ein Null-Verzeichnisname kann als zwei benachbarte Doppelpunkte oder als anfänglicher oder abschließender Doppelpunkt angezeigt werden. Der Standardpfad ist systemabhängig und wird vom Administrator festgelegt, der bash installiert. Ein gemeinsamer Wert ist

/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
POSIXLY_CORRECT

Wenn sich diese Variable beim Start von bash in der Umgebung befindet, wechselt die Shell in den Posix-Modus, bevor sie die Startdateien liest, als ob der --posix-Aufruf erfolgt wäre Option wurde bereitgestellt. Wenn es gesetzt wird, während die Shell läuft, aktiviert bash den Posix-Modus, als ob der Befehl set -o posix ausgeführt worden wäre. Wenn die Shell in den Posix-Modus wechselt, setzt sie diese Variable, falls sie nicht bereits gesetzt war.

PROMPT_COMMAND

Wenn diese Variable festgelegt ist und ein Array ist, wird der Wert jedes festgelegten Elements als Befehl ausgeführt, bevor jede primäre Eingabeaufforderung ausgegeben wird. Wenn diese festgelegt ist, aber keine Array-Variable ist, wird stattdessen ihr Wert als auszuführender Befehl verwendet.

PROMPT_DIRTRIM

Wenn dieser Wert auf eine Zahl größer als Null festgelegt ist, wird der Wert als Anzahl der nachgestellten Verzeichniskomponenten verwendet, die beim Erweitern der Eingabeaufforderungszeichenfolgen \w und \W beibehalten werden sollen (siehe <AUFFORDERUNG unten). Entfernte Zeichen werden durch Auslassungspunkte ersetzt.

PS0

Der Wert dieses Parameters wird erweitert (siehe PROMPTING unten) und von interaktiven Shells nach dem Lesen eines Befehls und vor der Ausführung des Befehls angezeigt.

PS1

Der Wert dieses Parameters wird erweitert (siehe PROMPTING unten) und als primäre Eingabeaufforderungszeichenfolge verwendet. Der Standardwert ist „\s-\v\$“.

PS2

Der Wert dieses Parameters wird wie bei PS1 erweitert und als sekundärer Eingabeaufforderungsstring verwendet. Der Standardwert ist „> “.

PS3

Der Wert dieses Parameters wird als Eingabeaufforderung für den Befehl select verwendet (siehe SHELL-GRAMMAR oben).

PS4

Der Wert dieses Parameters wird wie bei PS1 erweitert und der Wert wird gedruckt, bevor jeder Befehl bash während einer Ausführungsverfolgung angezeigt wird. Das erste Zeichen des erweiterten Werts von PS4 wird bei Bedarf mehrmals repliziert, um mehrere Ebenen der Indirektion anzuzeigen. Der Standardwert ist „+ “.

SHELL

Diese Variable wird auf den vollständigen Pfadnamen zur Shell erweitert. Wenn es beim Start der Shell nicht festgelegt ist, weist bash ihm den vollständigen Pfadnamen der Anmelde-Shell des aktuellen Benutzers zu.

TIMEFORMAT

Der Wert dieses Parameters wird als Formatzeichenfolge verwendet, die angibt, wie die Zeitinformationen für Pipelines, denen das reservierte Wort time vorangestellt ist, angezeigt werden sollen. Das Zeichen % leitet eine Escape-Sequenz ein, die um einen Zeitwert oder andere Informationen erweitert wird. Die Escape-Sequenzen und ihre Bedeutung sind wie folgt; die geschweiften Klammern kennzeichnen optionale Teile.

%%

Ein wörtliches %.

%[p][l]R

Die verstrichene Zeit in Sekunden.

%[p][l]U

Die Anzahl der CPU-Sekunden, die im Benutzermodus verbracht wurden.

%[p][l]S

Die Anzahl der CPU-Sekunden, die im Systemmodus verbracht wurden.

%P

Der CPU-Prozentsatz, berechnet als (%U + %S)/%R.

Das optionale p ist eine Ziffer, die die Genauigkeit angibt, die Anzahl der Nachkommastellen nach einem Dezimalpunkt. Ein Wert von 0 bewirkt, dass kein Dezimalpunkt oder Bruch ausgegeben wird. Es dürfen höchstens drei Nachkommastellen angegeben werden; Werte von p größer als 3 werden in 3 geändert. Wenn p nicht angegeben ist, wird der Wert 3 verwendet.

Das optionale l gibt ein längeres Format, einschließlich Minuten, der Form MMmSS.FFs an. Der Wert von p bestimmt, ob der Bruch enthalten ist oder nicht.

Wenn diese Variable nicht gesetzt ist, verhält sich bash so, als ob sie den Wert $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS' hätte . Wenn der Wert null ist, werden keine Zeitinformationen angezeigt. Bei der Anzeige der Formatzeichenfolge wird eine abschließende neue Zeile hinzugefügt.

TMOUT

Wenn TMOUT auf einen Wert größer als Null eingestellt ist, wird es als Standard-Timeout für das integrierte read behandelt. Der Befehl select wird beendet, wenn danach keine Eingabe eintrifft

TMOUT Sekunden, wenn die Eingabe von einem Terminal kommt. In einer interaktiven Shell wird der Wert als die Anzahl der Sekunden interpretiert, die nach Ausgabe der primären Eingabeaufforderung auf eine Eingabezeile gewartet wird. Bash wird nach dieser Anzahl von Sekunden beendet, wenn keine vollständige Eingabezeile eintrifft.

TMPDIR

Wenn festgelegt, verwendet bash seinen Wert als Namen eines Verzeichnisses, in dem bash temporäre Dateien für die Verwendung durch die Shell erstellt.

auto_resume

Diese Variable steuert, wie die Shell mit der Benutzer- und Jobsteuerung interagiert. Wenn diese Variable festgelegt ist, werden einfache Einzelwortbefehle ohne Umleitungen als Kandidaten für die Wiederaufnahme eines vorhandenen gestoppten Jobs behandelt. Es sind keine Mehrdeutigkeiten zulässig. Wenn mehr als ein Job mit der eingegebenen Zeichenfolge beginnt, wird der Job ausgewählt, auf den zuletzt zugegriffen wurde. Der Name eines gestoppten Jobs ist in diesem Zusammenhang die Befehlszeile, mit der er gestartet wird. Wenn der Wert exact eingestellt ist, muss die angegebene Zeichenfolge genau mit dem Namen eines gestoppten Jobs übereinstimmen. Wenn es auf substring gesetzt ist, muss die angegebene Zeichenfolge mit einer Teilzeichenfolge des Namens eines gestoppten Jobs übereinstimmen. Der substring-Wert bietet eine Funktionalität analog zur %?-Job-ID (siehe JOB CONTROL unten). Wenn ein anderer Wert festgelegt ist, muss die bereitgestellte Zeichenfolge ein Präfix des Namens eines gestoppten Jobs sein. Dies bietet eine analoge Funktionalität wie die Auftragskennung %string.

histchars

Die zwei oder drei Zeichen, die die Verlaufserweiterung und Tokenisierung steuern (siehe HISTORY EXPANSION unten). Das erste Zeichen ist das Zeichen History-Erweiterung, das den Beginn einer History-Erweiterung signalisiert, normalerweise „!“. Das zweite Zeichen ist das Schnellersetzungszeichen, das als Abkürzung für die erneute Ausführung des zuvor eingegebenen Befehls verwendet wird und eine Zeichenfolge durch eine andere im Befehl ersetzt. Der Standardwert ist „^“. Das optionale dritte Zeichen ist das Zeichen, das angibt, dass der Rest der Zeile ein Kommentar ist, wenn es als erstes Zeichen eines Wortes gefunden wird, normalerweise „#“. Das Verlaufskommentarzeichen bewirkt, dass die Verlaufsersetzung für die verbleibenden Wörter in der Zeile übersprungen wird. Dies führt nicht unbedingt dazu, dass der Shell-Parser den Rest der Zeile als Kommentar behandelt.

Arrays

Bash bietet eindimensional indizierte und assoziative Array-Variablen. Jede Variable kann als indiziertes Array verwendet werden; Die integrierte Funktion declare deklariert explizit ein Array. Es gibt keine maximale Beschränkung für die Größe eines Arrays und auch keine Anforderung, dass Mitglieder indiziert oder zusammenhängend zugewiesen werden. Indizierte Arrays werden mithilfe von Ganzzahlen (einschließlich arithmetischer Ausdrücke) referenziert und basieren auf Null. Assoziative Arrays werden mithilfe beliebiger Zeichenfolgen referenziert. Sofern nicht anders angegeben, müssen indizierte Array-Indizes nicht negative Ganzzahlen sein.

Ein indiziertes Array wird automatisch erstellt, wenn einer Variablen mithilfe der Syntax Name[Index]=Wert zugewiesen wird. Der Index wird als arithmetischer Ausdruck behandelt, der eine Zahl ergeben muss. Um ein indiziertes Array explizit zu deklarieren, verwenden Sie declare -a name (siehe SHELL BUILTIN COMMANDS unten). declare -a name[subscript] wird ebenfalls akzeptiert; Der Index wird ignoriert.

Assoziative Arrays werden mit declare -A name erstellt.

Attribute können für eine Array-Variable mithilfe der integrierten Funktionen declare und readonly angegeben werden. Jedes Attribut gilt für alle Mitglieder eines Arrays.

Arrays werden mithilfe zusammengesetzter Zuweisungen der Form name=(value1 ... valuen), wobei jeder Wert die Form [subscript]=string haben kann. Indizierte Array-Zuweisungen erfordern nichts anderes als string. Jeder Wert in der Liste wird mit allen unten unter EXPANSION beschriebenen Shell-Erweiterungen erweitert. Wenn bei der Zuweisung zu indizierten Arrays die optionalen Klammern und der Index angegeben werden, wird dieser Index zugewiesen; andernfalls ist der Index des zugewiesenen Elements der letzte Index, dem die Anweisung zugewiesen hat, plus eins. Die Indizierung beginnt bei Null.

Bei der Zuweisung zu einem assoziativen Array können die Wörter in einer zusammengesetzten Zuweisung entweder Zuweisungsanweisungen sein, für die der Index erforderlich ist, oder eine Liste von Wörtern, die als Folge abwechselnder Schlüssel und Werte interpretiert wird: name =( key1 value1 key2 value2 ...). Diese werden genauso behandelt wie name=( [key1]=value1 [key2 ]=Wert2 ...). Das erste Wort in der Liste bestimmt, wie die übrigen Wörter interpretiert werden; Alle Zuweisungen in einer Liste müssen vom gleichen Typ sein. Bei der Verwendung von Schlüssel/Wert-Paaren dürfen die Schlüssel nicht fehlen oder leer sein; Ein endgültig fehlender Wert wird wie die leere Zeichenfolge behandelt.

Diese Syntax wird auch vom integrierten declare akzeptiert. Einzelne Array-Elemente können mithilfe der oben eingeführten Syntax name[subscript]=value zugewiesen werden. Wenn bei der Zuweisung zu einem indizierten Array name eine negative Zahl tiefgestellt ist, wird diese Zahl als relativ zu einem Wert größer als der maximale Index von name interpretiert, sodass negative Indizes zählen vom Ende des Arrays zurück und ein Index von -1 verweist auf das letzte Element.

Auf jedes Element eines Arrays kann mit $ {name[subscript]} verwiesen werden. Die geschweiften Klammern sind erforderlich, um Konflikte mit der Pfadnamenerweiterung zu vermeiden. Wenn subscript @ oder * ist, wird das Wort auf alle Mitglieder von name erweitert. Diese Indizes unterscheiden sich nur, wenn das Wort in doppelten Anführungszeichen steht. Wenn das Wort in doppelte Anführungszeichen gesetzt wird, wird $ {name[*]} zu einem einzelnen Wort erweitert, wobei der Wert jedes Array-Mitglieds durch das erste Zeichen des IFS getrennt wird spezielle Variable und $ {name[@]} erweitert jedes Element von name zu einem separaten Wort. Wenn keine Array-Mitglieder vorhanden sind, wird $ {name[@]} zu nichts erweitert. Wenn die Erweiterung in doppelte Anführungszeichen innerhalb eines Wortes auftritt, wird die Erweiterung des ersten Parameters mit dem Anfangsteil des Originalworts verbunden, und die Erweiterung des letzten Parameters wird mit dem letzten Teil des Originalworts verbunden. Dies ist analog zur Erweiterung der Sonderparameter * und @ (siehe Spezialparameter oben). $ {#name[subscript]} wird auf die Länge von $ {name[subscript) erweitert ]}. Wenn subscript * oder @ ist, ist die Erweiterung die Anzahl der Elemente im Array. Wenn der Index, der zur Referenzierung eines Elements eines indizierten Arrays verwendet wird, eine Zahl kleiner als Null ergibt, wird er als relativ zu einem Wert größer als der maximale Index des Arrays interpretiert, sodass negative Indizes vom Index zurückgezählt werden Ende des Arrays und ein Index von -1 verweist auf das letzte Element.

Das Verweisen auf eine Array-Variable ohne Index ist gleichbedeutend mit dem Verweisen auf das Array mit einem Index von 0. Jeder Verweis auf eine Variable mit einem gültigen Index ist zulässig und bash erstellt bei Bedarf ein Array.

Eine Array-Variable gilt als gesetzt, wenn einem Index ein Wert zugewiesen wurde. Die Nullzeichenfolge ist ein gültiger Wert.

Es ist möglich, sowohl die Schlüssel (Indizes) eines Arrays als auch die Werte zu erhalten. $ {!name[@]} und $ {!name[*]} wird auf die Indizes erweitert, die in der Array-Variablen name zugewiesen sind. Die Behandlung in doppelten Anführungszeichen ähnelt der Erweiterung der Sonderparameter @ und * in doppelten Anführungszeichen.

Die integrierte Funktion unset wird zum Zerstören von Arrays verwendet. unset name[subscript] zerstört das Array-Element am Index subscript, sowohl für indizierte als auch für assoziative Arrays. Negative Indizes für indizierte Arrays werden wie oben beschrieben interpretiert. Durch das Aufheben des letzten Elements einer Array-Variablen wird die Variable nicht aufgehoben. unset name, wobei name ein Array ist, oder unset name[subscript], wobei subscript * oder @ ist, entfernt das gesamte Array.

Wenn Sie einen Variablennamen mit einem Index als Argument für einen Befehl verwenden, z. B. mit unset, ohne die oben beschriebene Worterweiterungssyntax zu verwenden, unterliegt das Argument der Pfadnamenerweiterung. Wenn eine Erweiterung des Pfadnamens nicht gewünscht ist, sollte das Argument in Anführungszeichen gesetzt werden.

Die integrierten Funktionen declare, local und readonly akzeptieren jeweils eine Option -a zum Angeben eines indizierten Arrays und eines -A-Option zum Angeben eines assoziativen Arrays. Wenn beide Optionen angegeben werden, hat -A Vorrang. Die read-Einrichtung akzeptiert eine -a-Option, um eine Liste von Wörtern, die aus der Standardeingabe gelesen wurden, einem Array zuzuweisen. Die integrierten Funktionen set und declare zeigen Array-Werte so an, dass sie als Zuweisungen wiederverwendet werden können.

ERWEITERUNG

Die Erweiterung erfolgt auf der Befehlszeile, nachdem sie in Wörter aufgeteilt wurde. Es werden sieben Arten der Erweiterung durchgeführt: Klammererweiterung, Tildeerweiterung, Parameter- und Variablenerweiterung, Befehlsersetzung, arithmetische Erweiterung, Wortaufteilung und Pfadnamenerweiterung.

Die Reihenfolge der Erweiterungen ist: Klammererweiterung; Tilde-Erweiterung, Parameter- und Variablenerweiterung, arithmetische Erweiterung und Befehlssubstitution (durchgeführt von links nach rechts); Wortaufteilung; und Pfadnamenerweiterung.

Auf Systemen, die dies unterstützen, ist eine zusätzliche Erweiterung verfügbar: Prozesssubstitution. Dies wird gleichzeitig mit der Tilde-, Parameter-, Variablen- und arithmetischen Erweiterung und Befehlsersetzung durchgeführt.

Nachdem diese Erweiterungen durchgeführt wurden, werden im ursprünglichen Wort vorhandene Anführungszeichen entfernt, es sei denn, sie wurden selbst in Anführungszeichen gesetzt (Anführungszeichenentfernung).

Nur die Klammererweiterung, die Wortaufteilung und die Pfadnamenerweiterung können die Anzahl der Wörter der Erweiterung erhöhen. andere Erweiterungen erweitern ein einzelnes Wort zu einem einzelnen Wort. Die einzigen Ausnahmen hiervon sind die Erweiterungen von „$@“ und „$ {name[@]}", und in den meisten Fällen $* und $ {name[*]} wie oben erläutert (siehe PARAMETER).

Klammererweiterung

Klammererweiterung ist ein Mechanismus, mit dem beliebige Zeichenfolgen generiert werden können. Dieser Mechanismus ähnelt der Pfadnamenerweiterung, die generierten Dateinamen müssen jedoch nicht vorhanden sein. Muster, die durch Klammern erweitert werden sollen, haben die Form einer optionalen Präambel, gefolgt von einer Reihe von durch Kommas getrennten Zeichenfolgen oder einem Sequenzausdruck zwischen einem Paar geschweifter Klammern, gefolgt von einem optionalen Postscript. Die Präambel wird jeder in den geschweiften Klammern enthaltenen Zeichenfolge vorangestellt, und das Postscript wird dann an jede resultierende Zeichenfolge angehängt und von links nach rechts erweitert.

Klammererweiterungen können verschachtelt sein. Die Ergebnisse der einzelnen erweiterten Zeichenfolgen werden nicht sortiert. Die Reihenfolge von links nach rechts bleibt erhalten. Beispielsweise wird a{d,c,b}e zu „ade ace abe“ erweitert.

Ein Sequenzausdruck hat die Form {x..y[..<incr]}, wobei x und y entweder ganze Zahlen oder einzelne Zeichen sind, und incr , ein optionales Inkrement, ist eine ganze Zahl. Wenn Ganzzahlen angegeben werden, wird der Ausdruck auf jede Zahl zwischen x und y (einschließlich) erweitert. Den bereitgestellten Ganzzahlen kann 0 vorangestellt werden, um zu erzwingen, dass jeder Term die gleiche Breite hat. Wenn entweder x oder y mit einer Null beginnt, versucht die Shell, alle generierten Begriffe dazu zu zwingen, die gleiche Anzahl von Ziffern zu enthalten, wobei bei Bedarf Nullen aufgefüllt werden. Wenn Zeichen angegeben werden, wird der Ausdruck lexikografisch auf jedes Zeichen zwischen x und y (einschließlich) erweitert, wobei das Standard-C-Gebietsschema verwendet wird. Beachten Sie, dass sowohl x als auch y vom gleichen Typ sein müssen. Wenn das Inkrement angegeben wird, wird es als Differenz zwischen den einzelnen Termen verwendet. Das Standardinkrement beträgt je nach Bedarf 1 oder -1.

Die Klammererweiterung wird vor allen anderen Erweiterungen durchgeführt und alle Sonderzeichen anderer Erweiterungen bleiben im Ergebnis erhalten. Es handelt sich ausschließlich um Text. Bash wendet keine syntaktische Interpretation auf den Kontext der Erweiterung oder den Text zwischen den Klammern an.

Eine korrekt geformte Klammererweiterung muss öffnende und schließende Klammern ohne Anführungszeichen sowie mindestens ein Komma ohne Anführungszeichen oder einen gültigen Sequenzausdruck enthalten. Eine fehlerhaft geformte Strebenerweiterung bleibt unverändert. Ein { oder , kann mit einem Backslash in Anführungszeichen gesetzt werden, um zu verhindern, dass es als Teil eines Klammerausdrucks betrachtet wird. Um Konflikte mit der Parametererweiterung zu vermeiden, gilt die Zeichenfolge $ { nicht als für die Klammererweiterung geeignet und verhindert die Klammererweiterung bis zum schließenden }.

Dieses Konstrukt wird typischerweise als Abkürzung verwendet, wenn das gemeinsame Präfix der zu generierenden Zeichenfolgen länger ist als im obigen Beispiel:

mkdir /usr/local/src/bash/{old,new,dist,bugs}

oder

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Die Brace-Erweiterung führt zu einer leichten Inkompatibilität mit historischen Versionen von sh. sh behandelt öffnende oder schließende Klammern nicht besonders, wenn sie als Teil eines Wortes erscheinen, und behält sie in der Ausgabe bei. Bash entfernt geschweifte Klammern aus Wörtern als Folge der Klammererweiterung. Beispielsweise erscheint ein Wort, das in sh als file{1,2} eingegeben wurde, in der Ausgabe identisch. Das gleiche Wort wird nach der Erweiterung durch bash als file1 file2 ausgegeben. Wenn eine strikte Kompatibilität mit sh gewünscht wird, starten Sie bash mit der Option +B oder deaktivieren Sie die Klammererweiterung mit +B > Option zum Befehl set (siehe SHELL BUILTIN COMMANDS unten).

Tilde-Erweiterung

Wenn ein Wort mit einem Tilde-Zeichen ohne Anführungszeichen („~“) beginnt, werden alle Zeichen vor dem ersten Schrägstrich ohne Anführungszeichen (oder alle Zeichen, wenn es keinen Schrägstrich ohne Anführungszeichen gibt) als Tilde betrachtet -Präfix. Wenn keines der Zeichen im Tilde-Präfix in Anführungszeichen steht, werden die Zeichen im Tilde-Präfix nach der Tilde als möglicher Anmeldename behandelt. Wenn dieser Anmeldename die Nullzeichenfolge ist, wird die Tilde durch den Wert des Shell-Parameters HOME ersetzt. Wenn HOME nicht festgelegt ist, wird stattdessen das Home-Verzeichnis des Benutzers verwendet, der die Shell ausführt. Andernfalls wird das Tilde-Präfix durch das Home-Verzeichnis ersetzt, das dem angegebenen Anmeldenamen zugeordnet ist.

Wenn das Tilde-Präfix ein „~+“ ist, ersetzt der Wert der Shell-Variablen PWD das Tilde-Präfix. Wenn das Tilde-Präfix ein „~-“ ist, wird der Wert der Shell-Variablen OLDPWD, falls festgelegt, ersetzt. Wenn die Zeichen nach der Tilde im Tilde-Präfix aus einer Zahl N bestehen, optional mit dem Präfix „+“ oder „-“, wird das Tilde-Präfix durch das entsprechende Element aus dem Verzeichnis ersetzt Stack, wie er von den eingebauten dirs angezeigt würde, die mit dem Tilde-Präfix als Argument aufgerufen werden. Wenn die Zeichen nach der Tilde im Tilde-Präfix aus einer Zahl ohne führendes „+“ oder „-“ bestehen, wird „+“ angenommen.

Wenn der Anmeldename ungültig ist oder die Tilde-Erweiterung fehlschlägt, bleibt das Wort unverändert.

Jede Variablenzuweisung wird auf Tilde-Präfixe ohne Anführungszeichen überprüft, die unmittelbar auf ein : oder das erste = folgen. In diesen Fällen wird auch eine Tilde-Erweiterung durchgeführt. Folglich kann man Dateinamen mit Tilden in Zuweisungen zu PATH, MAILPATH und CDPATH verwenden, und die Shell weist den erweiterten Wert zu.

Bash führt auch eine Tilde-Erweiterung für Wörter durch, die die Bedingungen für Variablenzuweisungen erfüllen (wie oben unter PARAMETER beschrieben), wenn sie als Argumente für einfache Befehle erscheinen. Bash führt dies im Posix-Modus nicht aus, mit Ausnahme der oben aufgeführten declaration-Befehle.

Parametererweiterung

Das Zeichen $ führt eine Parametererweiterung, Befehlsersetzung oder arithmetische Erweiterung ein. Der zu erweiternde Parametername oder das zu erweiternde Symbol kann in geschweifte Klammern eingeschlossen werden, die optional sind, aber dazu dienen, die zu erweiternde Variable vor unmittelbar darauf folgenden Zeichen zu schützen, die als Teil des Namens interpretiert werden könnten.

Wenn geschweifte Klammern verwendet werden, ist die passende Endklammer das erste „}“, das nicht durch einen Backslash oder in einer Zeichenfolge in Anführungszeichen maskiert wird und nicht innerhalb einer eingebetteten arithmetischen Erweiterung, Befehlsersetzung oder Parametererweiterung.

${parameter}

Der Wert von parameter wird ersetzt. Die geschweiften Klammern sind erforderlich, wenn parameter ein Positionsparameter mit mehr als einer Ziffer ist oder wenn parameter ein Zeichen folgt, das nicht als Teil seines Namens interpretiert werden soll. Der Parameter ist ein Shell-Parameter wie oben beschrieben (PARAMETERS) oder eine Array-Referenz (Arrays).

Wenn das erste Zeichen von parameter ein Ausrufezeichen (!) ist und parameter kein nameref ist, wird es führt eine Ebene der Indirektion ein. Bash verwendet den Wert, der durch Erweitern des Rests von parameter gebildet wird, als neuen parameter; Dieser wird dann erweitert und dieser Wert wird im Rest der Erweiterung anstelle der Erweiterung des ursprünglichen Parameters verwendet. Dies wird als indirekte Expansion bezeichnet. Der Wert unterliegt der Tilde-Erweiterung, der Parameter-Erweiterung, der Befehlssubstitution und der arithmetischen Erweiterung. Wenn parameter eine Namensreferenz ist, wird diese auf den Namen des Parameters erweitert, auf den durch parameter verwiesen wird, anstatt die vollständige indirekte Erweiterung durchzuführen. Ausnahmen hiervon bilden die Erweiterungen von $ {!prefix*} und $ {! name[@]} wie unten beschrieben. Das Ausrufezeichen muss unmittelbar auf die linke Klammer folgen, um eine Indirektion einzuleiten.

In jedem der folgenden Fälle unterliegt Wort einer Tilde-Erweiterung, einer Parameter-Erweiterung, einer Befehlsersetzung und einer arithmetischen Erweiterung.

Wenn keine Substring-Erweiterung durchgeführt wird, testet bash mithilfe der unten dokumentierten Formen (z. B. :-) auf einen Parameter, der nicht gesetzt oder null ist. Das Weglassen des Doppelpunkts führt zu einem Test nur für einen Parameter, der nicht gesetzt ist.

${parameter:-word}

Standardwerte verwenden. Wenn parameter nicht gesetzt oder null ist, wird die Erweiterung von word ersetzt. Andernfalls wird der Wert von parameter ersetzt.

${parameter:=word}

Standardwerte zuweisen. Wenn parameter nicht gesetzt oder null ist, wird die Erweiterung von word dem parameter zugewiesen. Der Wert von parameter wird dann ersetzt. Positionsparameter und Sonderparameter dürfen auf diese Weise nicht zugewiesen werden.

${parameter:?word}

Fehler anzeigen, wenn Null oder nicht gesetzt. Wenn parameter null oder nicht gesetzt ist, wird die Erweiterung von word (oder eine entsprechende Meldung, wenn word nicht vorhanden ist) in den Standard geschrieben Fehler und die Shell wird beendet, wenn sie nicht interaktiv ist. Andernfalls wird der Wert von parameter ersetzt.

${parameter:+word}

Alternativen Wert verwenden. Wenn parameter null oder nicht gesetzt ist, wird nichts ersetzt, andernfalls wird die Erweiterung von word ersetzt.

${parameter:offset}
${parameter:offset:length}

Teilstring-Erweiterung. Erweitert sich auf bis zu Länge Zeichen des Werts von Parameter, beginnend mit dem durch Offset angegebenen Zeichen. Wenn parameter @, ein indiziertes Array mit tiefgestelltem @ oder * oder ein assoziativer Array-Name ist, werden die Ergebnisse angezeigt unterscheiden sich wie unten beschrieben. Wenn length weggelassen wird, wird die Zeichenfolge auf die Teilzeichenfolge des Werts von parameter erweitert, beginnend bei dem durch offset angegebenen Zeichen und bis zum Ende des Werts . length und offset sind arithmetische Ausdrücke (siehe ARITHMETISCHE AUSWERTUNG unten).

Wenn offset eine Zahl kleiner als Null ergibt, wird der Wert als Offset in Zeichen vom Ende des Werts von parameter verwendet. Wenn length eine Zahl kleiner als Null ergibt, wird dies als Offset in Zeichen vom Ende des Werts von parameter und nicht als Anzahl von Zeichen und als Erweiterung interpretiert sind die Zeichen zwischen offset und diesem Ergebnis. Beachten Sie, dass ein negativer Offset durch mindestens ein Leerzeichen vom Doppelpunkt getrennt sein muss, um eine Verwechslung mit der Erweiterung :- zu vermeiden.

Wenn Parameter @ ist, sind das Ergebnis Länge-Positionsparameter, beginnend bei Offset. Ein negativer Offset wird relativ zu einem Wert größer als der größte Positionsparameter genommen, sodass ein Offset von -1 zum letzten Positionsparameter ausgewertet wird. Es handelt sich um einen Erweiterungsfehler, wenn length eine Zahl kleiner als Null ergibt.

Wenn parameter ein indizierter Array-Name mit tiefgestelltem @ oder * ist, sind das Ergebnis die length-Mitglieder des Arrays, beginnend mit $ {parameter [Offset]}. Ein negativer Offset wird relativ zu einem Wert größer als dem maximalen Index des angegebenen Arrays genommen. Es handelt sich um einen Erweiterungsfehler, wenn length eine Zahl kleiner als Null ergibt.

Die auf ein assoziatives Array angewendete Teilstring-Erweiterung führt zu undefinierten Ergebnissen.

Die Indizierung von Teilzeichenfolgen basiert auf Null, es sei denn, die Positionsparameter werden verwendet. In diesem Fall beginnt die Indizierung standardmäßig bei 1. Wenn offset 0 ist und die Positionsparameter verwendet werden, wird $0 der Liste vorangestellt.

${!prefix*}
${!prefix@}

Namen, die mit dem Präfix übereinstimmen. Erweitert um die Namen von Variablen, deren Namen mit Präfix beginnen, getrennt durch das erste Zeichen des

IFS-Spezialvariable. Wenn @ verwendet wird und die Erweiterung in doppelte Anführungszeichen gesetzt wird, wird jeder Variablenname zu einem separaten Wort erweitert.

${!name[@]}
${!name[*]}

Liste der Array-Schlüssel. Wenn name eine Array-Variable ist, wird sie auf die Liste der in name zugewiesenen Array-Indizes (Schlüssel) erweitert. Wenn name kein Array ist, wird es auf 0 erweitert, wenn name festgelegt ist, andernfalls auf null. Wenn @ verwendet wird und die Erweiterung in Anführungszeichen steht, wird jeder Schlüssel zu einem separaten Wort erweitert.

${#parameter}

Parameterlänge. Die Länge in Zeichen des Werts von Parameter wird ersetzt. Wenn parameter * oder @ ist, ist der ersetzte Wert die Anzahl der Positionsparameter. Wenn Parameter ein Array-Name ist, der durch * oder @ tiefgestellt ist, ist der ersetzte Wert die Anzahl der Elemente im Array. Wenn parameter ein indizierter Array-Name ist, der durch eine negative Zahl tiefgestellt ist, wird diese Zahl als relativ zu einem Wert interpretiert, der größer als der maximale Index von parameter ist, sodass negative Indizes ab dem zurückgezählt werden Ende des Arrays und ein Index von -1 verweist auf das letzte Element.

${parameter#word}
${parameter##word}

Übereinstimmendes Präfixmuster entfernen. Das Wort wird erweitert, um ein Muster zu erzeugen, genau wie bei der Pfadnamenerweiterung, und mit dem erweiterten Wert von Parameter abgeglichen, wobei die unter Mustervergleich beschriebenen Regeln verwendet werden unter. Wenn das Muster mit dem Anfang des Werts von parameter übereinstimmt, ist das Ergebnis der Erweiterung der erweiterte Wert von parameter mit dem kürzesten passenden Muster (dem „ #“-Fall) oder das längste übereinstimmende Muster (der „##“-Fall) gelöscht. Wenn parameter @ oder * ist, wird die Musterentfernungsoperation nacheinander auf jeden Positionsparameter angewendet und die Erweiterung ist die resultierende Liste. Wenn parameter eine mit @ oder * tiefgestellte Array-Variable ist, wird die Musterentfernungsoperation der Reihe nach auf jedes Mitglied des Arrays angewendet Die Erweiterung ist die resultierende Liste.

${parameter%word}
${parameter%%word}

Übereinstimmendes Suffixmuster entfernen. Das Wort wird erweitert, um ein Muster zu erzeugen, genau wie bei der Pfadnamenerweiterung, und mit dem erweiterten Wert von Parameter abgeglichen, wobei die unter Mustervergleich beschriebenen Regeln verwendet werden unter. Wenn das Muster mit einem nachgestellten Teil des erweiterten Werts von parameter übereinstimmt, ist das Ergebnis der Erweiterung der erweiterte Wert von parameter mit dem kürzesten passenden Muster (das „%“-Fall) oder das längste übereinstimmende Muster (der „%%“-Fall) gelöscht. Wenn parameter @ oder * ist, wird die Musterentfernungsoperation nacheinander auf jeden Positionsparameter angewendet und die Erweiterung ist die resultierende Liste. Wenn parameter eine mit @ oder * tiefgestellte Array-Variable ist, wird die Musterentfernungsoperation der Reihe nach auf jedes Mitglied des Arrays angewendet Die Erweiterung ist die resultierende Liste.

${parameter/pattern/string}

Musterersetzung. Das Muster wird erweitert, um ein Muster zu erzeugen, genauso wie bei der Pfadnamenerweiterung der Parameter erweitert wird und die längste Übereinstimmung von Muster mit seinem Wert durch ersetzt wird Zeichenfolge. Der Abgleich erfolgt anhand der unten unter Musterabgleich beschriebenen Regeln. Wenn pattern mit / beginnt, werden alle Übereinstimmungen von pattern durch string ersetzt. Normalerweise wird nur das erste Spiel ersetzt. Wenn pattern mit # beginnt, muss es am Anfang des erweiterten Werts von parameter übereinstimmen. Wenn pattern mit % beginnt, muss es am Ende des erweiterten Werts von parameter übereinstimmen. Wenn string null ist, werden Übereinstimmungen von pattern gelöscht und das /, das auf pattern folgt, kann weggelassen werden. Wenn die Shell-Option nocasematch aktiviert ist, wird der Abgleich ohne Rücksicht auf die Groß-/Kleinschreibung alphabetischer Zeichen durchgeführt. Wenn parameter @ oder * ist, wird die Ersetzungsoperation der Reihe nach auf jeden Positionsparameter angewendet und die Erweiterung ist die resultierende Liste. Wenn parameter eine mit @ oder * tiefgestellte Array-Variable ist, wird die Ersetzungsoperation der Reihe nach auf jedes Mitglied des Arrays und die Erweiterung angewendet ist die resultierende Liste.

${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}

Falländerung. Diese Erweiterung ändert die Groß-/Kleinschreibung alphabetischer Zeichen in Parameter. Das Muster wird wie bei der Pfadnamenerweiterung zu einem Muster erweitert. Jedes Zeichen im erweiterten Wert von parameter wird anhand von pattern getestet, und wenn es mit dem Muster übereinstimmt, wird seine Groß-/Kleinschreibung umgewandelt. Das Muster sollte nicht versuchen, mehr als ein Zeichen zu finden. Der ^-Operator wandelt Kleinbuchstaben, die mit muster übereinstimmen, in Großbuchstaben um; Der ,-Operator wandelt passende Großbuchstaben in Kleinbuchstaben um. Die Erweiterungen ^^ und ,, konvertieren jedes übereinstimmende Zeichen in den erweiterten Wert; Die Erweiterungen ^ und , stimmen nur mit dem ersten Zeichen im erweiterten Wert überein und konvertieren es. Wenn pattern weggelassen wird, wird es wie ein ? behandelt, das jedem Zeichen entspricht. Wenn parameter @ oder * ist, wird die Groß-/Kleinschreibungsänderungsoperation der Reihe nach auf jeden Positionsparameter angewendet und die Erweiterung ist die resultierende Liste. Wenn parameter eine mit @ oder * tiefgestellte Array-Variable ist, wird die Groß-/Kleinschreibungsänderungsoperation der Reihe nach auf jedes Mitglied des Arrays angewendet und die Die Erweiterung ist die resultierende Liste.

${parameter@operator}

Parametertransformation. Die Erweiterung ist entweder eine Transformation des Werts von Parameter oder Informationen über Parameter selbst, abhängig vom Wert von Operator. Jeder Operator besteht aus einem einzelnen Buchstaben:

U

Die Erweiterung ist eine Zeichenfolge, die den Wert von parameter mit in Großbuchstaben umgewandelten Kleinbuchstaben darstellt.

u

Die Erweiterung ist eine Zeichenfolge, die den Wert von parameter darstellt, wobei das erste Zeichen in Großbuchstaben umgewandelt wird, wenn es alphabetisch ist.

L

Die Erweiterung ist eine Zeichenfolge, die den Wert von parameter mit in Kleinbuchstaben umgewandelten Großbuchstaben darstellt.

Q

Die Erweiterung ist eine Zeichenfolge, die den Wert des Parameters in Anführungszeichen in einem Format darstellt, das als Eingabe wiederverwendet werden kann.

E

Die Erweiterung ist eine Zeichenfolge, die den Wert von parameter mit Backslash-Escape-Sequenzen darstellt, die wie beim Anführungszeichenmechanismus $'...' erweitert werden.

P

Die Erweiterung ist eine Zeichenfolge, die das Ergebnis der Erweiterung des Werts von parameter ist, als wäre es eine Eingabeaufforderungszeichenfolge (siehe PROMPTING unten).

A

Die Erweiterung ist eine Zeichenfolge in Form einer Zuweisungsanweisung oder eines declare-Befehls, der bei Auswertung den Parameter mit seinen Attributen und Werten neu erstellt.

K

Erzeugt eine möglicherweise in Anführungszeichen gesetzte Version des Werts von parameter, mit der Ausnahme, dass die Werte von indizierten und assoziativen Arrays als Folge von in Anführungszeichen gesetzten Schlüssel-Wert-Paaren ausgegeben werden (siehe Arrays oben). ).

a

Die Erweiterung ist eine Zeichenfolge, die aus Flag-Werten besteht, die die Attribute von Parameter darstellen.

Wenn parameter @ oder * ist, wird die Operation nacheinander auf jeden Positionsparameter angewendet und die Erweiterung ist die resultierende Liste. Wenn parameter eine mit @ oder * tiefgestellte Array-Variable ist, wird die Operation der Reihe nach auf jedes Mitglied des Arrays angewendet und die Erweiterung erfolgt die resultierende Liste.

Das Ergebnis der Erweiterung unterliegt der Wortaufteilung und der Pfadnamenerweiterung, wie unten beschrieben.

Befehlsersetzung

Befehlsersetzung ermöglicht die Ausgabe eines Befehls, um den Befehlsnamen zu ersetzen. Es gibt zwei Formen:

$(command )

oder

`command`

Bash führt die Erweiterung durch, indem es command in einer Subshell-Umgebung ausführt und die Befehlsersetzung durch die Standardausgabe des Befehls ersetzt, wobei alle nachfolgenden Zeilenumbrüche gelöscht werden. Eingebettete Zeilenumbrüche werden nicht gelöscht, können aber bei der Wortaufteilung entfernt werden. Die Befehlsersetzung $ (cat file) kann durch das äquivalente, aber schnellere $ (< ersetzt werden >Datei).

Wenn die altmodische Backquote-Ersetzungsform verwendet wird, behält der Backslash seine wörtliche Bedeutung, es sei denn, ihm folgen $, ` oder \. Das erste Backquote, dem kein Backslash vorangestellt ist, beendet die Befehlsersetzung. Bei Verwendung der Form $ ( Befehl ) bilden alle Zeichen zwischen den Klammern den Befehl; keiner wird besonders behandelt.

Befehlsersetzungen können verschachtelt sein. Um bei Verwendung der Backquote-Form zu verschachteln, maskieren Sie die inneren Backquotes mit Backslashes.

Wenn die Ersetzung in doppelten Anführungszeichen steht, werden bei den Ergebnissen keine Wortaufteilung und keine Pfadnamenerweiterung durchgeführt.

Arithmetische Erweiterung

Die arithmetische Erweiterung ermöglicht die Auswertung eines arithmetischen Ausdrucks und die Substitution des Ergebnisses. Das Format für die arithmetische Erweiterung ist:

$((expression))

Der Ausdruck wird so behandelt, als stünde er in doppelten Anführungszeichen, doppelte Anführungszeichen innerhalb der Klammern werden jedoch nicht speziell behandelt. Alle Token im Ausdruck werden einer Parameter- und Variablenerweiterung, einer Befehlsersetzung und einer Entfernung von Anführungszeichen unterzogen. Das Ergebnis wird als auszuwertender arithmetischer Ausdruck behandelt. Arithmetische Erweiterungen können verschachtelt sein.

Die Auswertung erfolgt nach den unten unter ARITHMETISCHE AUSWERTUNG aufgeführten Regeln. Wenn expression ungültig ist, gibt bash eine Meldung aus, die auf einen Fehler hinweist, und es erfolgt keine Ersetzung.

Prozesssubstitution

Mit der Prozessersetzung kann auf die Eingabe oder Ausgabe eines Prozesses mithilfe eines Dateinamens verwiesen werden. Es hat die Form <(list ) oder >(list ). Der Prozess list wird asynchron ausgeführt und seine Eingabe oder Ausgabe erscheint als Dateiname. Dieser Dateiname wird als Ergebnis der Erweiterung als Argument an den aktuellen Befehl übergeben. Wenn das Formular >(list ) verwendet wird, liefert das Schreiben in die Datei Eingaben für list. Wenn die Form <(list ) verwendet wird, sollte die als Argument übergebene Datei gelesen werden, um die Ausgabe von list zu erhalten . Die Prozessersetzung wird auf Systemen unterstützt, die Named Pipes (FIFOs) oder die /dev/fd-Methode zur Benennung geöffneter Dateien unterstützen.

Sofern verfügbar, wird die Prozesssubstitution gleichzeitig mit der Parameter- und Variablenerweiterung, der Befehlssubstitution und der arithmetischen Erweiterung durchgeführt.

Wortaufteilung

Die Shell durchsucht die Ergebnisse der Parametererweiterung, Befehlsersetzung und arithmetischen Erweiterung, die nicht in doppelten Anführungszeichen standen, nach Wortaufteilung.

Die Shell behandelt jedes Zeichen von IFS als Trennzeichen und teilt die Ergebnisse der anderen Erweiterungen in Wörter auf, wobei diese Zeichen als Feldabschlusszeichen verwendet werden. Wenn IFS nicht festgelegt ist oder sein Wert genau <space><tab><newline>, dem Standardwert, entspricht, dann folgen Sequenzen von <space> , <tab> und <newline> am Anfang und Ende der Ergebnisse der vorherigen Erweiterungen werden ignoriert, und jede Sequenz von IFS Zeichen, die nicht am Anfang oder Ende stehen, dienen der Abgrenzung von Wörtern. Wenn IFS einen anderen Wert als den Standardwert hat, dann Folgen der Leerzeichen Leerzeichen, Tab und Neuzeile werden am Anfang und Ende des Wortes ignoriert, solange das Leerzeichen im Wert von IFS liegt (ein IFS-Leerzeichen). Jedes Zeichen in IFS, das kein IFS-Leerzeichen ist, begrenzt zusammen mit allen angrenzenden IFS-Leerzeichen ein Feld. Eine Folge von IFS-Leerzeichen wird ebenfalls als Trennzeichen behandelt. Wenn der Wert von IFS null ist, findet keine Wortaufteilung statt.

Explizite Nullargumente ( " " oder  ' ' ) werden beibehalten und als leere Zeichenfolgen an Befehle übergeben. Implizite Nullargumente ohne Anführungszeichen, die aus der Erweiterung von Parametern ohne Werte resultieren, werden entfernt. Wenn ein Parameter ohne Wert in doppelte Anführungszeichen gesetzt wird, entsteht ein Nullargument, das beibehalten und als leere Zeichenfolge an einen Befehl übergeben wird. Wenn ein in Anführungszeichen gesetztes Nullargument als Teil eines Worts erscheint, dessen Erweiterung ungleich Null ist, wird das Nullargument entfernt. Das heißt, das Wort -d' ' wird nach der Wortaufteilung und der Entfernung von Nullargumenten zu -d.

Beachten Sie, dass keine Aufteilung erfolgt, wenn keine Erweiterung erfolgt.

Pfadnamenerweiterung

Nach der Wortaufteilung durchsucht bash jedes Wort nach den Zeichen *, ?, es sei denn, die Option -f wurde festgelegt > und [. Wenn eines dieser Zeichen vorkommt und nicht in Anführungszeichen steht, wird das Wort als Muster betrachtet und durch eine alphabetisch sortierte Liste von Dateinamen ersetzt, die dem Muster entsprechen (siehe Mustervergleich). > unten). Wenn keine passenden Dateinamen gefunden werden und die Shell-Option nullglob nicht aktiviert ist, bleibt das Wort unverändert. Wenn die Option nullglob gesetzt ist und keine Übereinstimmungen gefunden werden, wird das Wort entfernt. Wenn die Shell-Option failglob gesetzt ist und keine Übereinstimmungen gefunden werden, wird eine Fehlermeldung ausgegeben und der Befehl wird nicht ausgeführt. Wenn die Shell-Option nocaseglob aktiviert ist, wird der Abgleich ohne Rücksicht auf die Groß-/Kleinschreibung alphabetischer Zeichen durchgeführt. Wenn ein Muster für die Pfadnamenerweiterung verwendet wird, muss das Zeichen ``.'' am Anfang eines Namens oder unmittelbar nach einem Schrägstrich explizit abgeglichen werden, es sei denn, die Shell-Option dotglob ist eingestellt. Die Dateinamen ``.'' und ``..'' müssen immer explizit abgeglichen werden, auch wenn dotglob gesetzt ist. In anderen Fällen wird das Zeichen ``.'' nicht speziell behandelt. Beim Abgleichen eines Pfadnamens muss das Schrägstrichzeichen immer explizit mit einem Schrägstrich im Muster abgeglichen werden. In anderen Übereinstimmungskontexten kann es jedoch mit einem speziellen Musterzeichen abgeglichen werden, wie unten unter Musterabgleich beschrieben. Eine Beschreibung von nocaseglob, nullglob, finden Sie in der Beschreibung von shopt unten unter SHELL BUILTIN COMMANDS failglob- und dotglob-Shell-Optionen.

Die Shell-Variable GLOBIGNORE kann verwendet werden, um die Menge der Dateinamen einzuschränken, die einem Muster entsprechen. Wenn GLOBIGNORE festgelegt ist, wird jeder übereinstimmende Dateiname, der auch mit einem der Muster in GLOBIGNORE übereinstimmt, aus der Trefferliste entfernt. Wenn die Option nocaseglob gesetzt ist, erfolgt der Abgleich mit den Mustern in GLOBIGNORE ohne Rücksicht auf die Groß-/Kleinschreibung. Die Dateinamen . und .. werden immer ignoriert, wenn GLOBIGNORE gesetzt und nicht null ist. Das Festlegen von GLOBIGNORE auf einen Wert ungleich Null hat jedoch zur Folge, dass die Shell-Option dotglob aktiviert wird, sodass alle anderen Dateinamen, die mit einem . beginnen, aktiviert werden passen. Um das alte Verhalten des Ignorierens von Dateinamen, die mit . beginnen, zu erhalten, machen Sie .* zu einem der Muster in GLOBIGNORE. Die Option dotglob ist deaktiviert, wenn

GLOBIGNORE ist nicht gesetzt. Der Mustervergleich berücksichtigt die Einstellung der Shell-Option extglob.

Mustervergleich

Jedes Zeichen, das in einem Muster vorkommt, mit Ausnahme der unten beschriebenen Sonderzeichen des Musters, stimmt mit sich selbst überein. Das NUL-Zeichen darf in einem Muster nicht vorkommen. Ein Backslash maskiert das folgende Zeichen; Der Escape-Backslash wird beim Abgleich verworfen. Die Sonderzeichen des Musters müssen in Anführungszeichen gesetzt werden, wenn sie wörtlich abgeglichen werden sollen.

Die Sonderzeichen des Musters haben folgende Bedeutung:

*

Entspricht einer beliebigen Zeichenfolge, einschließlich der Nullzeichenfolge. Wenn die globstar-Shell-Option aktiviert ist und * in einem Pfadnamenerweiterungskontext verwendet wird, stimmen zwei benachbarte *s, die als einzelnes Muster verwendet werden, überein alle Dateien und null oder mehr Verzeichnisse und Unterverzeichnisse. Wenn darauf ein / folgt, stimmen zwei benachbarte *s nur mit Verzeichnissen und Unterverzeichnissen überein.

?

Entspricht einem beliebigen einzelnen Zeichen.

[...]

Entspricht einem der eingeschlossenen Zeichen. Ein durch einen Bindestrich getrenntes Zeichenpaar bezeichnet einen Bereichsausdruck; Jedes Zeichen, das zwischen diesen beiden Zeichen (einschließlich) liegt, wird unter Verwendung der Sortierfolge und des Zeichensatzes des aktuellen Gebietsschemas abgeglichen. Wenn das erste Zeichen nach dem [ ein ! oder ein ^ ist, wird jedes nicht eingeschlossene Zeichen abgeglichen. Die Sortierreihenfolge der Zeichen in Bereichsausdrücken wird durch das aktuelle Gebietsschema und die Werte der Shell-Variablen LC_COLLATE oder LC_ALL (sofern festgelegt) bestimmt. Um die traditionelle Interpretation von Bereichsausdrücken zu erhalten, bei denen [a-d] äquivalent zu [abcd] ist, setzen Sie den Wert der Shell-Variablen LC_ALL auf C oder aktivieren Sie die Shell-Option globasciiranges. Ein - kann gefunden werden, indem es als erstes oder letztes Zeichen in den Satz eingefügt wird. Ein ] kann gefunden werden, indem es als erstes Zeichen in den Satz aufgenommen wird.

Innerhalb von [ und ] können Zeichenklassen mit der Syntax [:class angegeben werden >:], wobei class eine der folgenden im POSIX-Standard definierten Klassen ist:

alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit

Eine Zeichenklasse entspricht jedem Zeichen, das zu dieser Klasse gehört. Die Zeichenklasse word entspricht Buchstaben, Ziffern und dem Zeichen _.

Innerhalb von [ und ] kann eine Äquivalenzklasse mit der Syntax [=c=], das alle Zeichen mit derselben Sortiergewichtung (wie durch das aktuelle Gebietsschema definiert) wie das Zeichen c abgleicht.

Innerhalb von [ und ] stimmt die Syntax [.symbol.] mit der Sortierung überein symbol symbol.

Wenn die extglob-Shell-Option mit der shopt-Integration aktiviert ist, werden mehrere erweiterte Mustervergleichsoperatoren erkannt. In der folgenden Beschreibung ist eine Musterliste eine Liste von einem oder mehreren Mustern, getrennt durch ein |. Zusammengesetzte Muster können aus einem oder mehreren der folgenden Untermuster gebildet werden:

?( pattern-list )

Entspricht keinem oder einem Vorkommen der angegebenen Muster

*( pattern-list )

Entspricht null oder mehr Vorkommen der angegebenen Muster

+( pattern-list )

Entspricht einem oder mehreren Vorkommen der angegebenen Muster

@( pattern-list )

Entspricht einem der angegebenen Muster

!( pattern-list )

Entspricht allem außer einem der angegebenen Muster

Der komplizierte erweiterte Mustervergleich mit langen Zeichenfolgen ist langsam, insbesondere wenn die Muster Abwechslungen enthalten und die Zeichenfolgen mehrere Übereinstimmungen enthalten. Die Verwendung separater Übereinstimmungen mit kürzeren Zeichenfolgen oder die Verwendung von Zeichenfolgenarrays anstelle einer einzelnen langen Zeichenfolge kann schneller sein.

Angebotsentfernung

Nach den vorherigen Erweiterungen werden alle nicht in Anführungszeichen stehenden Vorkommen der Zeichen \, ' und  "  entfernt, die nicht aus einer der obigen Erweiterungen resultieren.

WEITERLEITUNG

Bevor ein Befehl ausgeführt wird, können dessen Ein- und Ausgabe mithilfe einer speziellen, von der Shell interpretierten Notation umgeleitet werden. Durch die Umleitung können die Dateihandles von Befehlen dupliziert, geöffnet und geschlossen werden, auf andere Dateien verweisen und die Dateien ändern, aus denen der Befehl liest und in die er schreibt. Die Umleitung kann auch zum Ändern von Dateihandles in der aktuellen Shell-Ausführungsumgebung verwendet werden. Die folgenden Umleitungsoperatoren können vor oder an einer beliebigen Stelle innerhalb eines einfachen Befehls stehen oder einem Befehl folgen. Weiterleitungen werden in der Reihenfolge ihres Erscheinens von links nach rechts verarbeitet.

Jeder Umleitung, der eine Dateideskriptornummer vorangestellt werden kann, kann stattdessen ein Wort der Form {varname} vorangestellt werden. In diesem Fall weist die Shell für jeden Umleitungsoperator außer >&- und <&- einen Dateideskriptor größer oder gleich 10 zu und weist ihn varname zu. Wenn >&- oder <&- {varname} vorangestellt ist, definiert der Wert von varname den zu schließenden Dateideskriptor. Wenn {varname} angegeben wird, bleibt die Umleitung über den Geltungsbereich des Befehls hinaus bestehen, sodass der Shell-Programmierer den Dateideskriptor selbst verwalten kann.

Wenn in den folgenden Beschreibungen die Dateideskriptornummer weggelassen wird und das erste Zeichen des Umleitungsoperators < ist, bezieht sich die Umleitung auf die Standardeingabe (Dateideskriptor 0). Wenn das erste Zeichen des Umleitungsoperators > ist, bezieht sich die Umleitung auf die Standardausgabe (Dateideskriptor 1).

Das Wort, das in den folgenden Beschreibungen auf den Umleitungsoperator folgt, unterliegt, sofern nicht anders angegeben, der Klammererweiterung, der Tildeerweiterung, der Parameter- und Variablenerweiterung, der Befehlsersetzung, der arithmetischen Erweiterung, der Entfernung von Anführungszeichen, der Pfadnamenerweiterung und der Wortaufteilung. Wenn es sich auf mehr als ein Wort erweitert, meldet bash einen Fehler.

Beachten Sie, dass die Reihenfolge der Weiterleitungen von Bedeutung ist. Zum Beispiel der Befehl

ls > dirlist 2>&1

Leitet sowohl die Standardausgabe als auch die Standardfehlerausgabe an die Datei dirlist weiter, während der Befehl

ls 2>&1 > dirlist

leitet nur die Standardausgabe an die Datei dirlist weiter, da der Standardfehler von der Standardausgabe dupliziert wurde, bevor die Standardausgabe an dirlist umgeleitet wurde.

Bash verarbeitet mehrere Dateinamen, insbesondere wenn sie in Umleitungen verwendet werden, wie in der folgenden Tabelle beschrieben. Wenn das Betriebssystem, auf dem bash läuft, diese speziellen Dateien bereitstellt, wird Bash sie verwenden; andernfalls werden sie intern mit dem unten beschriebenen Verhalten emuliert.

/dev/fd/fd

Wenn fd eine gültige Ganzzahl ist, wird der Dateideskriptor fd dupliziert.

/dev/stdin

Dateideskriptor 0 ist dupliziert.

/dev/stdout

Dateideskriptor 1 ist dupliziert.

/dev/stderr

Dateideskriptor 2 ist dupliziert.

/dev/tcp/host/port

Wenn host ein gültiger Hostname oder eine gültige Internetadresse ist und port eine ganzzahlige Portnummer oder ein Dienstname ist, versucht bash, den entsprechenden TCP-Socket zu öffnen .

/dev/udp/host/port

Wenn host ein gültiger Hostname oder eine gültige Internetadresse ist und port eine ganzzahlige Portnummer oder ein Dienstname ist, versucht bash, den entsprechenden UDP-Socket zu öffnen .

Wenn das Öffnen oder Erstellen einer Datei fehlschlägt, schlägt die Umleitung fehl.

Umleitungen mit Dateideskriptoren größer als 9 sollten mit Vorsicht verwendet werden, da es zu Konflikten mit Dateideskriptoren kommen kann, die die Shell intern verwendet.

Eingabe umleiten

Durch die Umleitung der Eingabe wird die Datei, deren Name sich aus der Erweiterung von word ergibt, zum Lesen im Dateideskriptor n geöffnet, oder die Standardeingabe (Dateideskriptor 0), wenn n ist nicht angegeben.

Das allgemeine Format zum Umleiten von Eingaben ist:

[n]<word

Ausgabe umleiten

Durch die Umleitung der Ausgabe wird die Datei, deren Name sich aus der Erweiterung von word ergibt, zum Schreiben auf den Dateideskriptor n geöffnet, oder die Standardausgabe (Dateideskriptor 1), wenn n ist nicht angegeben. Wenn die Datei nicht existiert, wird sie erstellt; Wenn es existiert, wird es auf die Größe Null gekürzt.

Das allgemeine Format für die Umleitung der Ausgabe ist:

[n]>word

Wenn der Umleitungsoperator > ist und die Option noclobber für das integrierte set aktiviert wurde, schlägt die Umleitung fehl, wenn die Datei, deren Name lautet, angezeigt wird aus der Erweiterung von word existiert und eine reguläre Datei ist. Wenn der Umleitungsoperator >| ist oder der Umleitungsoperator > ist und die noclobber-Option für das set eingebaut ist Wenn der Befehl nicht aktiviert ist, wird die Umleitung auch dann versucht, wenn die mit word benannte Datei vorhanden ist.

Anhängen der umgeleiteten Ausgabe

Eine solche Umleitung der Ausgabe führt dazu, dass die Datei, deren Name sich aus der Erweiterung von word ergibt, zum Anhängen an den Dateideskriptor n oder die Standardausgabe (Dateideskriptor 1) geöffnet wird. wenn n nicht angegeben ist. Wenn die Datei nicht existiert, wird sie erstellt.

Das allgemeine Format zum Anhängen der Ausgabe ist:

[n]>>word

Umleiten von Standardausgabe und Standardfehler

Dieses Konstrukt ermöglicht die Umleitung der Standardausgabe (Dateideskriptor 1) und der Standardfehlerausgabe (Dateideskriptor 2) in die Datei, deren Name die Erweiterung von word ist.

Es gibt zwei Formate zum Umleiten von Standardausgabe und Standardfehler:

&>word

Und

>&word

Von den beiden Formen wird die erste bevorzugt. Dies ist semantisch äquivalent zu

>word 2>&1

Bei Verwendung der zweiten Form darf word nicht zu einer Zahl oder - erweitert werden. Wenn dies der Fall ist, gelten aus Kompatibilitätsgründen andere Umleitungsoperatoren (siehe Dateideskriptoren duplizieren unten).

Anhängen von Standardausgabe und Standardfehler

Mit diesem Konstrukt können sowohl die Standardausgabe (Dateideskriptor 1) als auch die Standardfehlerausgabe (Dateideskriptor 2) an die Datei angehängt werden, deren Name die Erweiterung von word ist.

Das Format zum Anhängen von Standardausgabe und Standardfehler ist:

&>>word

Dies ist semantisch äquivalent zu

>>word 2>&1

(siehe Dateideskriptoren duplizieren unten).

Hier Dokumente

Diese Art der Umleitung weist die Shell an, Eingaben aus der aktuellen Quelle zu lesen, bis eine Zeile angezeigt wird, die nur Trennzeichen (ohne abschließende Leerzeichen) enthält. Alle bis dahin gelesenen Zeilen werden dann als Standardeingabe (oder Dateideskriptor n, wenn n angegeben ist) für einen Befehl verwendet.

Das Format von Here-Dokumenten ist:

[n]<<[-]word
        here-document
delimiter

Für word wird keine Parameter- und Variablenerweiterung, Befehlsersetzung, arithmetische Erweiterung oder Pfadnamenerweiterung durchgeführt. Wenn ein Teil von word in Anführungszeichen gesetzt wird, ist das Trennzeichen das Ergebnis der Entfernung von Anführungszeichen für word, die Zeilen im Here-Dokument jedoch nicht erweitert. Wenn word nicht in Anführungszeichen steht, werden alle Zeilen des Here-Dokuments einer Parametererweiterung, Befehlsersetzung und arithmetischen Erweiterung unterzogen, die Zeichenfolge \<newline> wird ignoriert und \ muss verwendet werden, um die Zeichen \, $ und ` in Anführungszeichen zu setzen.

Wenn der Umleitungsoperator <<- ist, werden alle führenden Tabulatorzeichen aus den Eingabezeilen und der Zeile mit dem Trennzeichen entfernt. Dadurch können Here-Dokumente in Shell-Skripten auf natürliche Weise eingerückt werden.

Hier Saiten

Eine Variante dieser Dokumente, das Format ist:

[n]<<<word

Das Wort wird einer Tilde-Erweiterung, einer Parameter- und Variablenerweiterung, einer Befehlsersetzung, einer arithmetischen Erweiterung und der Entfernung von Anführungszeichen unterzogen. Eine Pfadnamenerweiterung und Wortaufteilung werden nicht durchgeführt. Das Ergebnis wird als einzelne Zeichenfolge mit angehängtem Zeilenumbruch an den Befehl in seiner Standardeingabe (oder an den Dateideskriptor n, wenn n angegeben ist) bereitgestellt.

Duplizieren von Dateideskriptoren

Der Umleitungsoperator

[n]<&word

wird zum Duplizieren von Eingabedateideskriptoren verwendet. Wenn word auf eine oder mehrere Ziffern erweitert wird, wird der durch n bezeichnete Dateideskriptor zu einer Kopie dieses Dateideskriptors. Wenn die Ziffern in word keinen zur Eingabe geöffneten Dateideskriptor angeben, tritt ein Umleitungsfehler auf. Wenn word den Wert - ergibt, wird der Dateideskriptor n geschlossen. Wenn n nicht angegeben ist, wird die Standardeingabe (Dateideskriptor 0) verwendet.

Der Betreiber

[n]>&word

wird in ähnlicher Weise zum Duplizieren von Ausgabedateideskriptoren verwendet. Wenn n nicht angegeben ist, wird die Standardausgabe (Dateideskriptor 1) verwendet. Wenn die Ziffern in word keinen für die Ausgabe geöffneten Dateideskriptor angeben, tritt ein Umleitungsfehler auf. Wenn word den Wert - ergibt, wird der Dateideskriptor n geschlossen. Als Sonderfall gelten die Standardausgabe und der Standardfehler, wenn n weggelassen wird und word nicht auf eine oder mehrere Ziffern oder - erweitert wird werden wie zuvor beschrieben umgeleitet.

Dateideskriptoren verschieben

Der Umleitungsoperator

[n]<&digit-

verschiebt den Dateideskriptor digit in den Dateideskriptor n oder die Standardeingabe (Dateideskriptor 0), wenn n nicht angegeben ist. digit wird geschlossen, nachdem es auf n dupliziert wurde.

Ebenso der Umleitungsoperator

[n]>&digit-

verschiebt den Dateideskriptor digit in den Dateideskriptor n oder in die Standardausgabe (Dateideskriptor 1), wenn n nicht angegeben ist.

Öffnen von Dateideskriptoren zum Lesen und Schreiben

Der Umleitungsoperator

[n]<>word

bewirkt, dass die Datei, deren Name die Erweiterung von word ist, sowohl zum Lesen als auch zum Schreiben auf dem Dateideskriptor n oder auf dem Dateideskriptor 0, wenn n, geöffnet wird > ist nicht angegeben. Wenn die Datei nicht existiert, wird sie erstellt.

Aliase

Aliase ermöglichen es, ein Wort durch eine Zeichenfolge zu ersetzen, wenn es als erstes Wort eines einfachen Befehls verwendet wird. Die Shell verwaltet eine Liste von Aliasen, die mit den integrierten Befehlen alias und unalias festgelegt und deaktiviert werden können (siehe BUILTIN-BEFEHLE DER SHELL unten). Das erste Wort jedes einfachen Befehls wird, wenn es nicht in Anführungszeichen steht, überprüft, um festzustellen, ob es einen Alias hat. Wenn ja, wird dieses Wort durch den Text des Alias ersetzt. Die Zeichen /, $, ` und = sowie alle Shell-Metazeichen oder die oben aufgeführten Anführungszeichen dürfen nicht in einem Aliasnamen vorkommen. Der Ersetzungstext kann jede gültige Shell-Eingabe enthalten, einschließlich Shell-Metazeichen. Das erste Wort des Ersetzungstextes wird auf Aliasnamen geprüft, aber ein Wort, das mit einem zu erweiternden Alias identisch ist, wird kein zweites Mal erweitert. Das bedeutet, dass man beispielsweise ls mit ls -F aliasen kann und bash nicht versucht, den Ersetzungstext rekursiv zu erweitern. Wenn das letzte Zeichen des Aliaswerts ein Leerzeichen ist, wird auch das nächste Befehlswort nach dem Alias auf Aliaserweiterung überprüft.

Aliase werden mit dem Befehl alias erstellt und aufgelistet und mit dem Befehl unalias entfernt.

Es gibt keinen Mechanismus zur Verwendung von Argumenten im Ersetzungstext. Wenn Argumente benötigt werden, sollte eine Shell-Funktion verwendet werden (siehe FUNKTIONEN unten).

Aliase werden nicht erweitert, wenn die Shell nicht interaktiv ist, es sei denn, die Shell-Option expand_aliases wird mit shopt festgelegt (siehe die Beschreibung von shopt unter SHELL-INTEGRIERTE BEFEHLE unten).

Die Regeln zur Definition und Verwendung von Aliasnamen sind etwas verwirrend. Bash liest immer mindestens eine vollständige Eingabezeile und alle Zeilen, aus denen ein zusammengesetzter Befehl besteht, bevor er einen der Befehle in dieser Zeile oder im zusammengesetzten Befehl ausführt. Aliase werden erweitert, wenn ein Befehl gelesen wird, nicht, wenn er ausgeführt wird. Daher wird eine Aliasdefinition, die in derselben Zeile wie ein anderer Befehl erscheint, erst wirksam, wenn die nächste Eingabezeile gelesen wird. Die Befehle, die der Aliasdefinition in dieser Zeile folgen, sind von dem neuen Alias nicht betroffen. Dieses Verhalten tritt auch bei der Ausführung von Funktionen auf. Aliase werden beim Lesen einer Funktionsdefinition erweitert, nicht beim Ausführen der Funktion, da eine Funktionsdefinition selbst ein Befehl ist. Infolgedessen sind in einer Funktion definierte Aliase erst verfügbar, nachdem diese Funktion ausgeführt wurde. Geben Sie Alias-Definitionen aus Sicherheitsgründen immer in eine separate Zeile ein und verwenden Sie alias nicht in zusammengesetzten Befehlen.

Für fast jeden Zweck werden Aliase durch Shell-Funktionen ersetzt.

FUNKTIONEN

Eine Shell-Funktion, die wie oben unter Shell-Grammatik beschrieben definiert wurde, speichert eine Reihe von Befehlen zur späteren Ausführung. Wenn der Name einer Shell-Funktion als einfacher Befehlsname verwendet wird, wird die Liste der mit diesem Funktionsnamen verknüpften Befehle ausgeführt. Funktionen werden im Kontext der aktuellen Shell ausgeführt; Es wird kein neuer Prozess erstellt, um sie zu interpretieren (im Gegensatz zur Ausführung eines Shell-Skripts). Wenn eine Funktion ausgeführt wird, werden die Argumente der Funktion während ihrer Ausführung zu Positionsparametern. Der spezielle Parameter # wird aktualisiert, um die Änderung widerzuspiegeln. Der Sonderparameter 0 bleibt unverändert. Das erste Element der Variablen FUNCNAME wird während der Ausführung der Funktion auf den Namen der Funktion gesetzt.

Alle anderen Aspekte der Shell-Ausführungsumgebung sind zwischen einer Funktion und ihrem Aufrufer identisch, mit diesen Ausnahmen: den DEBUG- und RETURN-Traps (siehe Beschreibung der Trap<). (eingebaut unter SHELL BUILTIN COMMANDS unten) werden nicht vererbt, es sei denn, der Funktion wurde das Attribut trace zugewiesen (siehe Beschreibung der declare). unten eingebaut) oder die Shell-Option -o functrace wurde mit dem integrierten set aktiviert (in diesem Fall erben alle Funktionen die DEBUG- und RETURN-Traps) und der ERR-Trap wird nicht vererbt, es sei denn, die Shell-Option -o errtrace wurde aktiviert.

Für die Funktion lokale Variablen können mit dem integrierten Befehl local deklariert werden. Normalerweise werden Variablen und ihre Werte von der Funktion und ihrem Aufrufer gemeinsam genutzt. Wenn eine Variable als lokal deklariert ist, ist der sichtbare Bereich der Variablen auf diese Funktion und ihre untergeordneten Elemente (einschließlich der von ihr aufgerufenen Funktionen) beschränkt. Lokale Variablen „schatten“ Variablen mit demselben Namen, die in vorherigen Bereichen deklariert wurden. Beispielsweise verbirgt eine in einer Funktion deklarierte lokale Variable eine globale Variable mit demselben Namen: Referenzen und Zuweisungen beziehen sich auf die lokale Variable, während die globale Variable unverändert bleibt. Wenn die Funktion zurückkehrt, ist die globale Variable wieder sichtbar.

Die Shell verwendet dynamisches Scoping, um die Sichtbarkeit einer Variablen innerhalb von Funktionen zu steuern. Beim dynamischen Scoping sind sichtbare Variablen und ihre Werte das Ergebnis der Folge von Funktionsaufrufen, die dazu geführt haben, dass die Ausführung die aktuelle Funktion erreicht hat. Der Wert einer Variablen, den eine Funktion sieht, hängt von ihrem Wert in ihrem Aufrufer (falls vorhanden) ab, unabhängig davon, ob es sich bei diesem Aufrufer um den „globalen“ Bereich oder eine andere Shell-Funktion handelt. Dies ist auch der Wert, den eine lokale Variablendeklaration „überschattet“ und der Wert, der wiederhergestellt wird, wenn die Funktion zurückkehrt.

Wenn beispielsweise eine Variable var in der Funktion func1 als lokal deklariert ist und func1 eine andere Funktion func2 aufruft, Verweise auf var, die innerhalb von func2 erstellt wurden, werden in die lokale Variable var von func1 aufgelöst und überschatten alle benannten globalen Variablen var.

Das eingebaute unset funktioniert ebenfalls mit demselben dynamischen Bereich: Wenn eine Variable lokal im aktuellen Bereich ist, wird sie durch unset deaktiviert; andernfalls verweist die nicht gesetzte Variable auf die Variable, die in jedem aufrufenden Bereich gefunden wird, wie oben beschrieben. Wenn eine Variable im aktuellen lokalen Bereich nicht gesetzt ist, bleibt dies so, bis sie in diesem Bereich zurückgesetzt wird oder bis die Funktion zurückkehrt. Sobald die Funktion zurückkehrt, wird jede Instanz der Variablen in einem vorherigen Bereich sichtbar. Wenn das Unset auf eine Variable in einem vorherigen Bereich wirkt, wird jede Instanz einer Variablen mit diesem Namen, die schattiert wurde, sichtbar.

Wenn die Variable FUNCNEST auf einen numerischen Wert größer als 0 eingestellt ist, definiert sie eine maximale Funktionsverschachtelungsebene. Funktionsaufrufe, die das Limit überschreiten, führen zum Abbruch des gesamten Befehls.

Wenn der integrierte Befehl return in einer Funktion ausgeführt wird, wird die Funktion abgeschlossen und die Ausführung mit dem nächsten Befehl nach dem Funktionsaufruf fortgesetzt. Jeder mit der RETURN-Trap verknüpfte Befehl wird ausgeführt, bevor die Ausführung fortgesetzt wird. Wenn eine Funktion abgeschlossen ist, werden die Werte der Positionsparameter und des Sonderparameters # auf die Werte zurückgesetzt, die sie vor der Ausführung der Funktion hatten.

Funktionsnamen und Definitionen können mit der Option -f der integrierten Befehle declare oder typeset aufgelistet werden. Die Option -F für declare oder typeset listet nur die Funktionsnamen auf (und optional die Quelldatei und Zeilennummer, wenn die extdebug-Shell-Option aktiviert ist). Funktionen können exportiert werden, sodass Subshells sie automatisch mit der Option -f für die export-Integration definieren. Eine Funktionsdefinition kann mit der Option -f der integrierten Funktion unset gelöscht werden.

Funktionen können rekursiv sein. Die Variable FUNCNEST kann verwendet werden, um die Tiefe des Funktionsaufrufstapels und die Anzahl der Funktionsaufrufe zu begrenzen. Standardmäßig ist die Anzahl der rekursiven Aufrufe nicht begrenzt.

Arithmetische Auswertung

Die Shell ermöglicht unter bestimmten Umständen die Auswertung arithmetischer Ausdrücke (siehe die integrierten Befehle let und declare, den zusammengesetzten Befehl (( und < (strong>Arithmetische Erweiterung). Die Auswertung erfolgt in ganzen Zahlen mit fester Breite ohne Prüfung auf Überlauf, obwohl die Division durch 0 abgefangen und als Fehler gekennzeichnet wird. Die Operatoren und ihre Rangfolge, Assoziativität und Werte sind die gleichen wie in der Sprache C. Die folgende Liste von Operatoren ist in Ebenen von Operatoren mit gleicher Priorität gruppiert. Die Ebenen sind in der Reihenfolge absteigender Priorität aufgeführt.

id++ id--

Variable Post-Inkrement und Post-Dekrement

- +

unäres Minus und Plus

++id --id

Variable Vorinkrementierung und Vordekrementierung

! ~

logische und bitweise Negation

**

Potenzierung

* / %

Multiplikation, Division, Rest

+ -

Addition Subtraktion

<< >>

Bitweise Verschiebungen nach links und rechts

<= >= < >

Vergleich

== !=

Gleichheit und Ungleichheit

&

bitweises UND

^

bitweises Exklusiv-ODER

|

bitweises ODER

&&

logisches UND

||

logisches ODER

expr?expr:expr

Bedingungsoperator

= *= /= %= += -= <<= >>= &= ^= |=

Abtretung

expr1 , expr2

Komma

Als Operanden sind Shell-Variablen erlaubt; Die Parametererweiterung wird durchgeführt, bevor der Ausdruck ausgewertet wird. Innerhalb eines Ausdrucks können Shell-Variablen auch namentlich referenziert werden, ohne die Parametererweiterungssyntax zu verwenden. Eine Shell-Variable, die null oder nicht gesetzt ist, wird als 0 ausgewertet, wenn sie über den Namen referenziert wird, ohne die Parametererweiterungssyntax zu verwenden. Der Wert einer Variablen wird als arithmetischer Ausdruck ausgewertet, wenn auf sie verwiesen wird oder wenn einer Variablen, der mit declare -i das Attribut integer zugewiesen wurde, ein Wert zugewiesen wird. Ein Nullwert ergibt 0. Für die Verwendung in einem Ausdruck muss das Attribut integer einer Shell-Variablen nicht aktiviert sein.

Ganzzahlkonstanten folgen der C-Sprachdefinition ohne Suffixe oder Zeichenkonstanten. Konstanten mit einer führenden 0 werden als Oktalzahlen interpretiert. Ein führendes 0x oder 0X bezeichnet hexadezimal. Andernfalls haben Zahlen die Form [base#]n, wobei die optionale base eine Dezimalzahl zwischen 2 und 64 ist, die die arithmetische Basis darstellt, und n ist eine Zahl in dieser Basis. Wenn base# weggelassen wird, wird Basis 10 verwendet. Wenn bei der Angabe von n eine Nicht-Ziffer erforderlich ist, werden die Ziffern größer als 9 durch die Kleinbuchstaben, die Großbuchstaben @ und _ in dieser Reihenfolge dargestellt. Wenn base kleiner oder gleich 36 ist, können Klein- und Großbuchstaben austauschbar verwendet werden, um Zahlen zwischen 10 und 35 darzustellen.

Operatoren werden in der Reihenfolge ihrer Priorität ausgewertet. Unterausdrücke in Klammern werden zuerst ausgewertet und können die oben genannten Vorrangregeln außer Kraft setzen.

BEDINGTE AUSDRÜCKE

Bedingte Ausdrücke werden vom zusammengesetzten Befehl [[ und den integrierten Befehlen test und [ verwendet, um Dateiattribute zu testen und Zeichenfolgen- und arithmetische Vergleiche durchzuführen. Die Befehle test und [ bestimmen ihr Verhalten basierend auf der Anzahl der Argumente; Weitere befehlsspezifische Aktionen finden Sie in den Beschreibungen dieser Befehle.

Ausdrücke werden aus den folgenden unären oder binären Primärwerten gebildet. Bash verarbeitet mehrere Dateinamen, insbesondere wenn sie in Ausdrücken verwendet werden. Wenn das Betriebssystem, auf dem bash läuft, diese speziellen Dateien bereitstellt, wird Bash sie verwenden; Andernfalls werden sie intern mit folgendem Verhalten emuliert: Wenn ein file-Argument für eine der Primärdateien die Form /dev/fd/n hat, dann ist der Dateideskriptor n wird überprüft. Wenn das Argument file für eine der Primärdateien eines von /dev/stdin, /dev/stdout oder /dev/ ist stderr, Dateideskriptor 0, 1 bzw. 2, wird überprüft.

Sofern nicht anders angegeben, folgen Primärdateien, die mit Dateien arbeiten, symbolischen Links und operieren auf dem Ziel des Links und nicht auf dem Link selbst.

Bei Verwendung mit [[“ sortieren die Operatoren < und > lexikografisch anhand des aktuellen Gebietsschemas. Der Befehl test sortiert mithilfe der ASCII-Reihenfolge.

-a file

True, wenn file vorhanden ist.

-b file

True, wenn file existiert und eine Blockspezialdatei ist.

-c file

True, wenn file existiert und eine spezielle Zeichendatei ist.

-d file

True, wenn file existiert und ein Verzeichnis ist.

-e file

True, wenn file vorhanden ist.

-f file

True, wenn file existiert und eine reguläre Datei ist.

-g file

True, wenn file existiert und set-group-id ist.

-h file

True, wenn file existiert und ein symbolischer Link ist.

-k file

True, wenn file existiert und sein „Sticky“-Bit gesetzt ist.

-p file

True, wenn file existiert und eine Named Pipe (FIFO) ist.

-r file

True, wenn file existiert und lesbar ist.

-s file

True, wenn file existiert und eine Größe größer als Null hat.

-t fd

True, wenn der Dateideskriptor fd geöffnet ist und auf ein Terminal verweist.

-u file

True, wenn file vorhanden ist und ihr Set-User-ID-Bit gesetzt ist.

-w file

True, wenn file existiert und beschreibbar ist.

-x file

True, wenn file existiert und ausführbar ist.

-G file

True, wenn file vorhanden ist und der effektiven Gruppen-ID gehört.

-L file

True, wenn file existiert und ein symbolischer Link ist.

-N file

True, wenn file existiert und seit dem letzten Lesen geändert wurde.

-O file

True, wenn file vorhanden ist und der effektiven Benutzer-ID gehört.

-S file

True, wenn file existiert und ein Socket ist.

file1 -ef file2

True, wenn file1 und file2 auf dasselbe Gerät und dieselben Inode-Nummern verweisen.

file1 -nt file2

True, wenn file1 neuer ist (gemäß Änderungsdatum) als file2, oder wenn file1 existiert und file2 nicht .

file1 -ot file2

True, wenn file1 älter als file2 ist oder wenn file2 existiert und file1 nicht.

-o optname

True, wenn die Shell-Option optname aktiviert ist. Sehen Sie sich die Liste der Optionen unter der Beschreibung der Option -o für das integrierte set unten an.

-v varname

True, wenn die Shell-Variable varname gesetzt ist (ein Wert zugewiesen wurde).

-R varname

True, wenn die Shell-Variable varname gesetzt ist und eine Namensreferenz ist.

-z string

True, wenn die Länge von string Null ist.

string
-n string

True, wenn die Länge von string ungleich Null ist.

string1 == string2
string1 = string2

True, wenn die Zeichenfolgen gleich sind. = sollte mit dem Befehl test für POSIX-Konformität verwendet werden. Bei Verwendung mit dem Befehl [[ führt dieser einen Mustervergleich wie oben beschrieben durch (Zusammengesetzte Befehle).

string1 != string2

True, wenn die Zeichenfolgen nicht gleich sind.

string1 < string2

True, wenn string1 lexikografisch vor string2 sortiert wird.

string1 > string2

True, wenn string1 lexikografisch nach string2 sortiert wird.

arg1 OP arg2

OP ist eines von -eq, -ne, -lt, -le , -gt oder -ge. Diese arithmetischen Binäroperatoren geben „true“ zurück, wenn arg1 gleich, ungleich, kleiner als, kleiner oder gleich, größer als oder größer oder gleich arg2 ist. bzw. Arg1 und arg2 können positive oder negative ganze Zahlen sein. Bei Verwendung mit dem Befehl [[ werden Arg1 und Arg2 als arithmetische Ausdrücke ausgewertet (siehe ARITHMETISCHE AUSWERTUNG oben). .

EINFACHE BEFEHLSERWEITERUNG

Wenn ein einfacher Befehl ausgeführt wird, führt die Shell die folgenden Erweiterungen, Zuweisungen und Umleitungen von links nach rechts in der folgenden Reihenfolge durch.

  1. Die Wörter, die der Parser als Variablenzuweisungen (die vor dem Befehlsnamen stehen) und Umleitungen markiert haben, werden zur späteren Verarbeitung gespeichert.

  2. Die Wörter, die keine Variablenzuweisungen oder Umleitungen sind, werden erweitert. Wenn nach der Erweiterung noch Wörter übrig bleiben, wird das erste Wort als Name des Befehls verwendet und die verbleibenden Wörter sind die Argumente.

  3. Umleitungen werden wie oben unter UMLEITUNG beschrieben durchgeführt.

  1. Der Text nach dem = in jeder Variablenzuweisung durchläuft eine Tilde-Erweiterung, Parametererweiterung, Befehlsersetzung, arithmetische Erweiterung und Entfernung von Anführungszeichen, bevor er der Variablen zugewiesen wird.

Wenn sich kein Befehlsname ergibt, wirken sich die Variablenzuweisungen auf die aktuelle Shell-Umgebung aus. Andernfalls werden die Variablen zur Umgebung des ausgeführten Befehls hinzugefügt und haben keinen Einfluss auf die aktuelle Shell-Umgebung. Wenn eine der Zuweisungen versucht, einer schreibgeschützten Variablen einen Wert zuzuweisen, tritt ein Fehler auf und der Befehl wird mit einem Status ungleich Null beendet.

Wenn sich kein Befehlsname ergibt, werden Umleitungen durchgeführt, haben jedoch keine Auswirkungen auf die aktuelle Shell-Umgebung. Ein Umleitungsfehler führt dazu, dass der Befehl mit einem Status ungleich Null beendet wird.

Wenn nach der Erweiterung ein Befehlsname übrig bleibt, wird die Ausführung wie unten beschrieben fortgesetzt. Andernfalls wird der Befehl beendet. Wenn eine der Erweiterungen eine Befehlsersetzung enthielt, ist der Exit-Status des Befehls der Exit-Status der zuletzt durchgeführten Befehlsersetzung. Wenn es keine Befehlsersetzungen gab, wird der Befehl mit dem Status Null beendet.

BEFEHLSAUSFÜHRUNG

Nachdem ein Befehl in Wörter aufgeteilt wurde und daraus ein einfacher Befehl und eine optionale Liste von Argumenten resultieren, werden die folgenden Aktionen ausgeführt.

Wenn der Befehlsname keine Schrägstriche enthält, versucht die Shell, ihn zu finden. Wenn es eine Shell-Funktion mit diesem Namen gibt, wird diese Funktion wie oben unter FUNKTIONEN beschrieben aufgerufen. Wenn der Name nicht mit einer Funktion übereinstimmt, sucht die Shell in der Liste der Shell-Builtins danach. Wenn eine Übereinstimmung gefunden wird, wird diese integrierte Funktion aufgerufen.

Wenn der Name weder eine Shell-Funktion noch eine integrierte Funktion ist und keine Schrägstriche enthält, durchsucht bash jedes Element des PATH nach einem Verzeichnis, das eine ausführbare Datei mit diesem Namen enthält. Bash verwendet eine Hash-Tabelle, um sich die vollständigen Pfadnamen ausführbarer Dateien zu merken (siehe Hash unter SHELL BUILTIN COMMANDS unten). Eine vollständige Suche der Verzeichnisse in PATH wird nur durchgeführt, wenn der Befehl nicht in der Hash-Tabelle gefunden wird. Wenn die Suche nicht erfolgreich ist, sucht die Shell nach einer definierten Shell-Funktion mit dem Namen command_not_found_handle. Wenn diese Funktion vorhanden ist, wird sie in einer separaten Ausführungsumgebung mit dem ursprünglichen Befehl und den Argumenten des ursprünglichen Befehls als Argumenten aufgerufen, und der Exit-Status der Funktion wird zum Exit-Status dieser Subshell. Wenn diese Funktion nicht definiert ist, gibt die Shell eine Fehlermeldung aus und gibt den Exit-Status 127 zurück.

Wenn die Suche erfolgreich ist oder der Befehlsname einen oder mehrere Schrägstriche enthält, führt die Shell das genannte Programm in einer separaten Ausführungsumgebung aus. Argument 0 wird auf den angegebenen Namen gesetzt und die übrigen Argumente des Befehls werden auf die angegebenen Argumente gesetzt, sofern vorhanden.

Wenn diese Ausführung fehlschlägt, weil die Datei nicht im ausführbaren Format vorliegt und die Datei kein Verzeichnis ist, wird davon ausgegangen, dass es sich um ein Shell-Skript handelt, eine Datei, die Shell-Befehle enthält. Zur Ausführung wird eine Subshell erzeugt. Diese Subshell initialisiert sich selbst neu, sodass der Effekt so ist, als ob eine neue Shell aufgerufen worden wäre, um das Skript zu verarbeiten, mit der Ausnahme, dass die Speicherorte der Befehle von der übergeordneten Shell gespeichert wurden (siehe Hash unten unter SHELL BUILTIN COMMANDS) bleiben vom Kind erhalten.

Wenn es sich bei dem Programm um eine Datei handelt, die mit #! beginnt, gibt der Rest der ersten Zeile einen Interpreter für das Programm an. Die Shell führt den angegebenen Interpreter auf Betriebssystemen aus, die dieses ausführbare Format nicht selbst verarbeiten. Die Argumente für den Interpreter bestehen aus einem einzelnen optionalen Argument, das auf den Interpreternamen in der ersten Zeile des Programms folgt, gefolgt vom Namen des Programms und gegebenenfalls den Befehlsargumenten.

BEFEHLSAUSFÜHRUNGSUMGEBUNG

Die Shell verfügt über eine Ausführungsumgebung, die aus Folgendem besteht:

  • Öffnen Sie Dateien, die von der Shell beim Aufruf geerbt wurden und durch Umleitungen geändert wurden, die an die exec-Integration übergeben wurden

  • das aktuelle Arbeitsverzeichnis, wie es von cd, pushd oder popd festgelegt oder von der Shell beim Aufruf geerbt wird

  • die Maske des Dateierstellungsmodus, wie sie von umask festgelegt oder vom übergeordneten Element der Shell geerbt wurde

  • aktuelle Traps, die von trap gesetzt wurden

  • Shell-Parameter, die durch Variablenzuweisung oder mit set festgelegt oder vom übergeordneten Element der Shell in der Umgebung geerbt werden

  • Shell-Funktionen, die während der Ausführung definiert oder vom übergeordneten Shell-Element in der Umgebung geerbt werden

  • Optionen, die beim Aufruf aktiviert werden (entweder standardmäßig oder mit Befehlszeilenargumenten) oder durch Set

  • Von shopt aktivierte Optionen

  • Shell-Aliase, die mit alias definiert sind

  • verschiedene Prozess-IDs, einschließlich derer von Hintergrundjobs, der Wert von $$ und der Wert von PPID. Wenn ein einfacher Befehl außer einer integrierten oder Shell-Funktion ausgeführt werden soll, wird er in einer separaten Ausführungsumgebung aufgerufen, die aus Folgendem besteht. Sofern nicht anders angegeben, werden die Werte von der Shell geerbt.

  • die geöffneten Dateien der Shell sowie alle Änderungen und Ergänzungen, die durch Umleitungen des Befehls angegeben werden

  • das aktuelle Arbeitsverzeichnis

  • die Dateierstellungsmodusmaske

  • Shell-Variablen und -Funktionen, die für den Export markiert sind, sowie Variablen, die für den Befehl exportiert und in der Umgebung übergeben wurden

  • Von der Shell abgefangene Traps werden auf die von der übergeordneten Shell geerbten Werte zurückgesetzt, und von der Shell ignorierte Traps werden ignoriert

Ein in dieser separaten Umgebung aufgerufener Befehl kann sich nicht auf die Ausführungsumgebung der Shell auswirken.

Befehlsersetzung, in Klammern gruppierte Befehle und asynchrone Befehle werden in einer Subshell-Umgebung aufgerufen, die ein Duplikat der Shell-Umgebung ist, mit der Ausnahme, dass von der Shell abgefangene Traps auf die Werte zurückgesetzt werden, die die Shell beim Aufruf von ihrer übergeordneten Shell geerbt hat. Integrierte Befehle, die als Teil einer Pipeline aufgerufen werden, werden auch in einer Subshell-Umgebung ausgeführt. An der Subshell-Umgebung vorgenommene Änderungen haben keinen Einfluss auf die Ausführungsumgebung der Shell.

Subshells, die zum Ausführen von Befehlsersetzungen erzeugt werden, erben den Wert der Option -e von der übergeordneten Shell. Wenn Sie sich nicht im Posix-Modus befinden, löscht bash die Option -e in solchen Subshells.

Wenn auf einen Befehl ein & folgt und die Jobsteuerung nicht aktiv ist, ist die standardmäßige Standardeingabe für den Befehl die leere Datei /dev/null. Andernfalls erbt der aufgerufene Befehl die durch Umleitungen geänderten Dateideskriptoren der aufrufenden Shell.

UMFELD

Wenn ein Programm aufgerufen wird, erhält es ein Array von Zeichenfolgen, das als Umgebung bezeichnet wird. Dies ist eine Liste von Name-Wert-Paaren in der Form Name=Wert.

Die Shell bietet mehrere Möglichkeiten, die Umgebung zu manipulieren. Beim Aufruf scannt die Shell ihre eigene Umgebung und erstellt für jeden gefundenen Namen einen Parameter, der ihn automatisch für den Export in untergeordnete Prozesse markiert. Ausgeführte Befehle erben die Umgebung. Mit den Befehlen export und declare -x können Parameter und Funktionen zur Umgebung hinzugefügt und daraus gelöscht werden. Wenn der Wert eines Parameters in der Umgebung geändert wird, wird der neue Wert Teil der Umgebung und ersetzt den alten. Die von jedem ausgeführten Befehl geerbte Umgebung besteht aus der Anfangsumgebung der Shell, deren Werte in der Shell geändert werden können, abzüglich etwaiger Paare, die durch den Befehl unset entfernt wurden, sowie aller Ergänzungen über den Befehl export- und declare -x-Befehle.

Die Umgebung für jeden einfachen Befehl oder jede Funktion kann vorübergehend erweitert werden, indem ihm Parameterzuweisungen vorangestellt werden, wie oben unter PARAMETER beschrieben. Diese Zuweisungsanweisungen wirken sich nur auf die Umgebung aus, die von diesem Befehl gesehen wird.

Wenn die Option -k gesetzt ist (siehe den integrierten Befehl set unten), werden alle Parameterzuweisungen in der Umgebung für einen Befehl platziert. nicht nur diejenigen, die vor dem Befehlsnamen stehen.

Wenn bash einen externen Befehl aufruft, wird die Variable _ auf den vollständigen Dateinamen des Befehls gesetzt und an diesen Befehl in seiner Umgebung übergeben.

EXIT-STATUS

Der Exit-Status eines ausgeführten Befehls ist der Wert, der vom Systemaufruf waitpid oder einer entsprechenden Funktion zurückgegeben wird. Der Exit-Status liegt zwischen 0 und 255. Wie unten erläutert, verwendet die Shell jedoch möglicherweise speziell Werte über 125. Exit-Status von Shell-Builtins und zusammengesetzten Befehlen sind ebenfalls auf diesen Bereich beschränkt. Unter bestimmten Umständen verwendet die Shell spezielle Werte, um bestimmte Fehlermodi anzuzeigen.

Für die Zwecke der Shell war ein Befehl erfolgreich, der mit einem Null-Exit-Status beendet wurde. Ein Exit-Status von Null zeigt einen Erfolg an. Ein Exit-Status ungleich Null weist auf einen Fehler hin. Wenn ein Befehl bei einem schwerwiegenden Signal N beendet wird, verwendet bash den Wert 128+N als Exit-Status.

Wenn ein Befehl nicht gefunden wird, gibt der zu seiner Ausführung erstellte untergeordnete Prozess den Status 127 zurück. Wenn ein Befehl gefunden wird, aber nicht ausführbar ist, ist der Rückgabestatus 126.

Wenn ein Befehl aufgrund eines Fehlers während der Erweiterung oder Umleitung fehlschlägt, ist der Exit-Status größer als Null.

Integrierte Shell-Befehle geben bei Erfolg den Status 0 (true) und einen Wert ungleich Null (false) zurück, wenn bei der Ausführung ein Fehler auftritt. Alle integrierten Funktionen geben den Exit-Status 2 zurück, um auf falsche Verwendung, allgemein ungültige Optionen oder fehlende Argumente hinzuweisen.

Bash selbst gibt den Exit-Status des zuletzt ausgeführten Befehls zurück, es sei denn, es tritt ein Syntaxfehler auf. In diesem Fall wird es mit einem Wert ungleich Null beendet. Siehe auch den integrierten Befehl exit weiter unten.

SIGNALE

Wenn bash interaktiv ist und keine Traps vorhanden sind, ignoriert es SIGTERM (damit kill 0 keine interaktive Shell beendet) und SIGINT wird abgefangen und verarbeitet (so dass das eingebaute Warten unterbrechbar ist). In allen Fällen ignoriert bash SIGQUIT. Wenn die Jobkontrolle aktiv ist, ignoriert bash SIGTTIN, SIGTTOU und SIGTSTP.

Bei nicht integrierten Befehlen, die von bash ausgeführt werden, sind Signalhandler auf die Werte eingestellt, die die Shell von ihrem übergeordneten Element geerbt hat. Wenn die Jobsteuerung nicht wirksam ist, ignorieren asynchrone Befehle zusätzlich zu diesen geerbten Handlern SIGINT und SIGQUIT. Befehle, die als Ergebnis einer Befehlsersetzung ausgeführt werden, ignorieren die über die Tastatur generierten Jobsteuerungssignale SIGTTIN, SIGTTOU und SIGTSTP.

Die Shell wird standardmäßig beendet, wenn ein SIGHUP empfangen wird. Vor dem Beenden sendet eine interaktive Shell das SIGHUP erneut an alle laufenden oder gestoppten Jobs. Angehaltene Jobs werden mit SIGCONT gesendet, um sicherzustellen, dass sie das SIGHUP erhalten. Um zu verhindern, dass die Shell das Signal an einen bestimmten Job sendet, sollte dieser mit der eingebauten Funktion disown (siehe SHELL BUILTIN COMMANDS unten) aus der Jobtabelle entfernt oder als „nicht“ markiert werden Empfangen Sie SIGHUP mit disown -h.

Wenn die Shell-Option huponexit mit shopt gesetzt wurde, sendet bash bei einer interaktiven Anmeldung ein SIGHUP an alle Jobs Shell-Exits.

Wenn bash auf den Abschluss eines Befehls wartet und ein Signal empfängt, für das ein Trap gesetzt wurde, wird der Trap erst ausgeführt, wenn der Befehl abgeschlossen ist. Wenn bash über das eingebaute wait auf einen asynchronen Befehl wartet, löst der Empfang eines Signals, für das ein Trap gesetzt wurde, das wait aus eingebaut, um sofort mit einem Exit-Status größer als 128 zurückzukehren, unmittelbar danach wird der Trap ausgeführt.

JOBKONTROLLE

Unter Jobkontrolle versteht man die Möglichkeit, die Ausführung von Prozessen selektiv zu stoppen (auszusetzen) und ihre Ausführung zu einem späteren Zeitpunkt fortzusetzen (wiederaufzunehmen). Ein Benutzer nutzt diese Funktion normalerweise über eine interaktive Schnittstelle, die gemeinsam vom Terminaltreiber des Betriebssystemkerns und der Bash bereitgestellt wird.

Die Shell ordnet jeder Pipeline einen Job zu. Es führt eine Tabelle der aktuell ausgeführten Jobs, die mit dem Befehl jobs aufgelistet werden können. Wenn bash einen Job asynchron (im Hintergrund) startet, wird eine Zeile gedruckt, die wie folgt aussieht:

[1] 25647

Dies gibt an, dass es sich bei diesem Job um Jobnummer 1 handelt und dass die Prozess-ID des letzten Prozesses in der diesem Job zugeordneten Pipeline 25647 lautet. Alle Prozesse in einer einzelnen Pipeline sind Mitglieder desselben Jobs. Bash verwendet die Job-Abstraktion als Grundlage für die Jobsteuerung.

Um die Implementierung der Benutzeroberfläche zur Jobsteuerung zu erleichtern, behält das Betriebssystem den Begriff einer aktuellen Terminal-Prozessgruppen-ID bei. Mitglieder dieser Prozessgruppe (Prozesse, deren Prozessgruppen-ID mit der aktuellen Terminal-Prozessgruppen-ID übereinstimmt) erhalten über die Tastatur generierte Signale wie SIGINT. Diese Prozesse sollen im Vordergrund stehen. Hintergrund-Prozesse sind solche, deren Prozessgruppen-ID sich von der des Terminals unterscheidet; Solche Prozesse sind immun gegen tastaturgenerierte Signale. Nur Vordergrundprozesse dürfen vom Terminal lesen oder, wenn der Benutzer dies mit stty tostop angibt, auf das Terminal schreiben. Hintergrundprozesse, die versuchen, vom Terminal zu lesen (zu schreiben, wenn stty tostop aktiv ist), erhalten vom Terminaltreiber des Kernels ein SIGTTIN (SIGTTOU)-Signal, das, sofern nicht erwischt, unterbricht den Prozess.

Wenn das Betriebssystem, auf dem bash läuft, die Jobsteuerung unterstützt, enthält bash Möglichkeiten, diese zu verwenden. Die Eingabe des suspend-Zeichens (typischerweise ^Z, Control-Z) während der Ausführung eines Prozesses führt dazu, dass dieser Prozess gestoppt wird und die Kontrolle an bash zurückgegeben wird . Die Eingabe des Zeichens verzögerte Suspendierung (normalerweise ^Y, Strg-Y) führt dazu, dass der Prozess gestoppt wird, wenn er versucht, Eingaben vom Terminal zu lesen, und die Kontrolle an das Terminal zurückgegeben wird Bash. Der Benutzer kann dann den Status dieses Jobs manipulieren, indem er den Befehl bg verwendet, um ihn im Hintergrund fortzusetzen, den Befehl fg, um ihn im Vordergrund fortzusetzen, oder den Befehl kill-Befehl, um es zu töten. Ein ^Z wird sofort wirksam und hat den zusätzlichen Nebeneffekt, dass ausstehende Ausgaben und Typehead verworfen werden.

Es gibt verschiedene Möglichkeiten, auf einen Job in der Shell zu verweisen. Das Zeichen % leitet eine Jobspezifikation (jobspec) ein. Jobnummer n kann als %n bezeichnet werden. Auf einen Job kann auch über ein Präfix des Namens verwiesen werden, mit dem er gestartet wurde, oder über eine Teilzeichenfolge, die in seiner Befehlszeile angezeigt wird. Beispielsweise bezieht sich %ce auf einen gestoppten Job, dessen Befehlsname mit ce beginnt. Wenn ein Präfix mit mehr als einem Job übereinstimmt, meldet bash einen Fehler. Die Verwendung von %?ce hingegen bezieht sich auf jeden Job, der die Zeichenfolge ce in seiner Befehlszeile enthält. Wenn die Teilzeichenfolge mit mehr als einem Job übereinstimmt, meldet bash einen Fehler. Die Symbole %% und %+ beziehen sich auf die Shell-Vorstellung des aktuellen Jobs, bei dem es sich um den letzten Job handelt, der gestoppt wurde, während er im Vordergrund war oder im Hintergrund gestartet. Der vorherige Job kann mit %- referenziert werden. Wenn es nur einen einzigen Job gibt, können %+ und %- beide verwendet werden, um auf diesen Job zu verweisen. In der Ausgabe, die sich auf Jobs bezieht (z. B. die Ausgabe des Befehls jobs), wird der aktuelle Job immer mit einem + und der vorherige Job mit einem - gekennzeichnet. . Ein einzelnes % (ohne zugehörige Stellenangabe) bezieht sich ebenfalls auf die aktuelle Stelle.

Durch einfaches Benennen eines Jobs kann dieser in den Vordergrund gerückt werden: %1 ist ein Synonym für ``fg %1'' und bringt Job 1 aus dem Hintergrund in den Vordergrund. Ebenso setzt ``%1 &'' Job 1 im Hintergrund fort, äquivalent zu ``bg %1''.

Die Shell lernt sofort, wenn sich der Status eines Jobs ändert. Normalerweise wartet bash, bis eine Eingabeaufforderung gedruckt wird, bevor es Änderungen im Status eines Auftrags meldet, um keine andere Ausgabe zu unterbrechen. Wenn die Option -b für den integrierten Befehl set aktiviert ist, meldet bash solche Änderungen sofort. Jeder Trap auf SIGCHLD wird für jedes Kind ausgeführt, das beendet wird.

Wenn versucht wird, bash zu beenden, während Jobs gestoppt sind (oder, wenn die checkjobs-Shell-Option mit dem shopt-Integrierten aktiviert wurde, wird ausgeführt ), gibt die Shell eine Warnmeldung aus und listet die Jobs und ihren Status auf, wenn die Option checkjobs aktiviert ist. Anschließend kann der Befehl Jobs verwendet werden, um deren Status zu überprüfen. Wenn ein zweiter Versuch zum Beenden ohne dazwischenliegenden Befehl unternommen wird, gibt die Shell keine weitere Warnung aus und alle gestoppten Jobs werden beendet.

Wenn die Shell mithilfe der integrierten Funktion wait auf einen Job oder Prozess wartet und die Jobsteuerung aktiviert ist, kehrt wait zurück, wenn der Job seinen Status ändert. Die Option -f bewirkt, dass wait wartet, bis der Job oder Prozess beendet ist, bevor es zurückkehrt.

AUFFORDERN

Bei der interaktiven Ausführung zeigt bash die primäre Eingabeaufforderung PS1 an, wenn es zum Lesen eines Befehls bereit ist, und die sekundäre Eingabeaufforderung PS2, wenn weitere Eingaben erforderlich sind um einen Befehl auszuführen. Bash zeigt PS0 an, nachdem es einen Befehl gelesen hat, aber bevor es ihn ausführt. Bash zeigt PS4 wie oben beschrieben an, bevor es jeden Befehl verfolgt, wenn die Option -x aktiviert ist. Mit Bash können diese Eingabeaufforderungszeichenfolgen angepasst werden, indem eine Reihe von Backslash-Escape-Sonderzeichen eingefügt werden, die wie folgt dekodiert werden:

\a

ein ASCII-Glockenzeichen (07)

\d

das Datum im Format „Wochentag-Monat-Datum“ (z. B. „Dienstag, 26. Mai“)

\D{format}

das Format wird an strftime(3) übergeben und das Ergebnis wird in die Eingabeaufforderungszeichenfolge eingefügt; Ein leeres Format führt zu einer gebietsschemaspezifischen Zeitdarstellung. Die Zahnspangen sind erforderlich

\e

ein ASCII-Escape-Zeichen (033)

\h

der Hostname bis zum ersten „.“

\H

der Hostname

\j

die Anzahl der Jobs, die derzeit von der Shell verwaltet werden

\l

Der Basisname des Terminalgerätenamens der Shell

\n

Neue Zeile

\r

Wagenrücklauf

\s

der Name der Shell, der Basisname von $0 (der Teil nach dem letzten Schrägstrich)

\t

die aktuelle Uhrzeit im 24-Stunden-Format HH:MM:SS

\T

die aktuelle Uhrzeit im 12-Stunden-Format HH:MM:SS

\@

die aktuelle Uhrzeit im 12-Stunden-Am/PM-Format

\A

die aktuelle Uhrzeit im 24-Stunden-Format HH:MM

\u

der Benutzername des aktuellen Benutzers

\v

die Version von bash (z. B. 2.00)

\V

die Veröffentlichung von bash, Version + Patch-Level (z. B. 2.00.0)

\w

das aktuelle Arbeitsverzeichnis, wobei $HOME mit einer Tilde abgekürzt wird (verwendet den Wert der Variablen PROMPT_DIRTRIM)

\W

der Basisname des aktuellen Arbeitsverzeichnisses, wobei $HOME mit einer Tilde abgekürzt wird

\!

die Verlaufsnummer dieses Befehls

\#

die Befehlsnummer dieses Befehls

\$

wenn die effektive UID 0 ist, ein #, andernfalls ein $

\nnn

das Zeichen, das der Oktalzahl nnn entspricht

\\

ein Backslash

\[

Beginnen Sie mit einer Folge nicht druckbarer Zeichen, die zum Einbetten einer Terminalsteuerungssequenz in die Eingabeaufforderung verwendet werden könnten

\]

Beenden Sie eine Folge nicht druckbarer Zeichen

Die Befehlsnummer und die Verlaufsnummer sind normalerweise unterschiedlich: Die Verlaufsnummer eines Befehls ist seine Position in der Verlaufsliste, die Befehle umfassen kann, die aus der Verlaufsdatei (siehe VERLAUF unten) während des Befehls wiederhergestellt wurden Zahl ist die Position in der Befehlsfolge, die während der aktuellen Shell-Sitzung ausgeführt wird. Nachdem die Zeichenfolge dekodiert wurde, wird sie durch Parametererweiterung, Befehlsersetzung, arithmetische Erweiterung und Anführungszeichenentfernung erweitert, abhängig vom Wert der Shell-Option promptvars (siehe Beschreibung von shopt<-Befehl unter SHELL BUILTIN COMMANDS unten). Dies kann unerwünschte Nebenwirkungen haben, wenn maskierte Teile der Zeichenfolge in der Befehlsersetzung vorkommen oder spezielle Zeichen für die Worterweiterung enthalten.

ZEILE LESEN

Dies ist die Bibliothek, die Leseeingaben verarbeitet, wenn eine interaktive Shell verwendet wird, es sei denn, die Option --noediting wird beim Shell-Aufruf angegeben. Die Zeilenbearbeitung wird auch verwendet, wenn die Option -e für die read-Funktion verwendet wird. Standardmäßig ähneln die Zeilenbearbeitungsbefehle denen von Emacs. Eine Zeilenbearbeitungsoberfläche im vi-Stil ist ebenfalls verfügbar. Die Zeilenbearbeitung kann jederzeit mit den Optionen -o emacs oder -o vi für das integrierte set aktiviert werden (siehe SHELL BUILTIN BEFEHLE weiter unten). Um die Zeilenbearbeitung nach dem Ausführen der Shell zu deaktivieren, verwenden Sie die Optionen +o emacs oder +o vi für das integrierte set.

Readline-Notation

In diesem Abschnitt wird die Notation im Emacs-Stil zur Bezeichnung von Tastenanschlägen verwendet. Steuertasten werden mit C-key bezeichnet, z. B. C-n bedeutet Control-N. In ähnlicher Weise werden meta-Schlüssel mit M-key bezeichnet, sodass M-x Meta-X bedeutet. (Auf Tastaturen ohne meta-Taste bedeutet M-x ESC x, d. h. drücken Sie die Escape-Taste und dann x-Taste. Dies macht ESC zum Meta-Präfix. Die Kombination M-C-x bedeutet ESC-Strg-x, oder drücken Sie dann die Escape-Taste Halten Sie die Strg-Taste gedrückt, während Sie die Taste x drücken.)

Readline-Befehlen können numerische Argumente zugewiesen werden, die normalerweise als Wiederholungszähler dienen. Manchmal ist es jedoch das Vorzeichen des Arguments, das ausschlaggebend ist. Die Übergabe eines negativen Arguments an einen Befehl, der in Vorwärtsrichtung wirkt (z. B. kill-line), führt dazu, dass dieser Befehl in Rückwärtsrichtung wirkt. Befehle, deren Verhalten mit Argumenten davon abweicht, werden im Folgenden aufgeführt.

Wenn ein Befehl als Töten von Text beschrieben wird, wird der gelöschte Text für einen möglichen zukünftigen Abruf (Entfernen) gespeichert. Der getötete Text wird in einem Kill-Ring gespeichert. Durch aufeinanderfolgende Kills wird der Text zu einer Einheit zusammengefasst, die auf einmal entfernt werden kann. Befehle, die keinen Text töten, trennen die Textblöcke im Kill-Ring.

Readline-Initialisierung

Readline wird angepasst, indem Befehle in eine Initialisierungsdatei (die inputrc-Datei) eingefügt werden. Der Name dieser Datei wird aus dem Wert der Variablen INPUTRC übernommen. Wenn diese Variable nicht gesetzt ist, ist der Standardwert ~/.inputrc. Wenn diese Datei nicht existiert oder nicht gelesen werden kann, ist die endgültige Standardeinstellung /etc/inputrc. Wenn ein Programm gestartet wird, das die Readline-Bibliothek verwendet, wird die Initialisierungsdatei gelesen und die Tastenkombinationen und Variablen festgelegt. In der Readline-Initialisierungsdatei sind nur wenige Grundkonstrukte zulässig. Leerzeilen werden ignoriert. Zeilen, die mit einem # beginnen, sind Kommentare. Zeilen, die mit einem $ beginnen, weisen auf bedingte Konstrukte hin. Andere Zeilen bezeichnen Tastenkombinationen und Variableneinstellungen.

Die Standardtastenkombinationen können mit einer inputrc-Datei geändert werden. Andere Programme, die diese Bibliothek verwenden, fügen möglicherweise ihre eigenen Befehle und Bindungen hinzu.

Zum Beispiel das Platzieren

M-Control-u: universal-argument

oder

C-Meta-u: universal-argument

in den inputrc würde dazu führen, dass M-C-u den Readline-Befehl universal-argument ausführt.

Folgende symbolische Zeichennamen werden erkannt: RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE und TAB.

Zusätzlich zu Befehlsnamen ermöglicht readline die Bindung von Tasten an eine Zeichenfolge, die beim Drücken der Taste eingefügt wird (ein Makro).

Readline-Tastenkombinationen

Die Syntax zur Steuerung der Tastenkombinationen in der Datei inputrc ist einfach. Benötigt wird lediglich der Name des Befehls oder der Text eines Makros und eine Tastenfolge, an die es gebunden werden soll. Der Name kann auf zwei Arten angegeben werden: als symbolischer Schlüsselname, möglicherweise mit Meta-- oder Control--Präfixen, oder als Tastenfolge.

Bei Verwendung der Form keyname: function-name oder macro ist keyname der Name einer Taste, die in geschrieben wird Englisch. Zum Beispiel:

Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"

Im obigen Beispiel ist C-u an die Funktion universal-argument gebunden, M-DEL ist an die Funktion backward-kill gebunden -word, und C-o ist verpflichtet, das auf der rechten Seite ausgedrückte Makro auszuführen (d. h. den Text „>output“ in die Zeile einzufügen).

In der zweiten Form, "keyseq": function-name oder macro, unterscheidet sich keyseq von keyname oben, da Zeichenfolgen, die eine gesamte Tastenfolge bezeichnen, angegeben werden können, indem die Folge in doppelte Anführungszeichen gesetzt wird. Einige Schlüssel-Escapezeichen im GNU Emacs-Stil können verwendet werden, wie im folgenden Beispiel, aber die symbolischen Zeichennamen werden nicht erkannt.

"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"

In diesem Beispiel ist C-u wieder an die Funktion universal-argument gebunden. C-x C-r ist an die Funktion re-read-init-file gebunden, und ESC [ 1 1 ~ ist gebunden, um den Text „ einzufügen Funktionstaste 1''.

Der vollständige Satz von Escape-Sequenzen im GNU Emacs-Stil ist

\C-

Kontrollpräfix

\M-

Meta-Präfix

\e

ein Escape-Zeichen

\\

Backslash

\"

wörtlich "

\'

wörtlich '

Zusätzlich zu den Escape-Sequenzen im GNU Emacs-Stil ist ein zweiter Satz von Backslash-Escape-Sequenzen verfügbar:

\a

Alarm (Glocke)

\b

Rücktaste

\d

löschen

\f

Formularvorschub

\n

Neue Zeile

\r

Wagenrücklauf

\t

horizontale Registerkarte

\v

vertikale Registerkarte

\nnn

das Acht-Bit-Zeichen, dessen Wert der Oktalwert nnn ist (ein bis drei Ziffern)

\xHH

das Acht-Bit-Zeichen, dessen Wert der Hexadezimalwert HH ist (eine oder zwei Hexadezimalziffern)

Bei der Eingabe des Textes eines Makros müssen einfache oder doppelte Anführungszeichen verwendet werden, um eine Makrodefinition anzugeben. Es wird davon ausgegangen, dass es sich bei Text ohne Anführungszeichen um einen Funktionsnamen handelt. Im Makrokörper werden die oben beschriebenen Backslash-Escapezeichen erweitert. Mit einem Backslash werden alle anderen Zeichen im Makrotext in Anführungszeichen gesetzt, einschließlich „ und „.

Bash ermöglicht die Anzeige oder Änderung der aktuellen Readline-Tastenbelegungen mit dem integrierten Befehl bind. Der Bearbeitungsmodus kann während der interaktiven Nutzung umgeschaltet werden, indem die Option -o für den integrierten Befehl set verwendet wird (siehe BUILTIN-BEFEHLE VON SHELL unten).

Readline-Variablen

Readline verfügt über Variablen, mit denen sich das Verhalten weiter anpassen lässt. Eine Variable kann in der Datei inputrc mit einer Anweisung der Form festgelegt werden

set variable-name value

oder mit dem integrierten Befehl bind (siehe BUILTIN-BEFEHLE VON SHELL unten).

Sofern nicht anders angegeben, können Readline-Variablen die Werte On oder Off annehmen (unabhängig von der Groß-/Kleinschreibung). Nicht erkannte Variablennamen werden ignoriert. Wenn ein Variablenwert gelesen wird, entsprechen leere oder Nullwerte, „on“ (ohne Berücksichtigung der Groß-/Kleinschreibung) und „1“ On. Alle anderen Werte entsprechen Aus. Die Variablen und ihre Standardwerte sind:

bell-style (audible)

Steuert, was passiert, wenn readline die Terminalklingel läuten lassen möchte. Wenn auf none gesetzt, klingelt readline nie. Wenn es auf sichtbar gesetzt ist, verwendet readline eine sichtbare Glocke, sofern verfügbar. Wenn es auf audible gesetzt ist, versucht readline, die Glocke des Terminals zu läuten.

bind-tty-special-chars (On)

Wenn auf On gesetzt, versucht readline, die vom Terminaltreiber des Kernels speziell behandelten Steuerzeichen an ihre readline-Entsprechungen zu binden.

blink-matching-paren (Off)

Wenn auf Ein gesetzt, versucht readline, den Cursor kurzzeitig auf eine öffnende Klammer zu bewegen, wenn eine schließende Klammer eingefügt wird.

colored-completion-prefix (Off)

Wenn auf Ein gesetzt, zeigt readline beim Auflisten von Vervollständigungen das gemeinsame Präfix der Menge möglicher Vervollständigungen in einer anderen Farbe an. Die Farbdefinitionen werden aus dem Wert der Umgebungsvariablen LS_COLORS übernommen.

colored-stats (Off)

Wenn auf Ein gesetzt, zeigt readline mögliche Vervollständigungen in verschiedenen Farben an, um ihren Dateityp anzuzeigen. Die Farbdefinitionen werden aus dem Wert der Umgebungsvariablen LS_COLORS übernommen.

comment-begin (``#'')

Die Zeichenfolge, die eingefügt wird, wenn der readline-Befehl insert-comment ausgeführt wird. Dieser Befehl ist im Emacs-Modus an M-# und im vi-Befehlsmodus an # gebunden.

completion-display-width (-1)

Die Anzahl der Bildschirmspalten, die zur Anzeige möglicher Übereinstimmungen bei der Vervollständigung verwendet werden. Der Wert wird ignoriert, wenn er kleiner als 0 oder größer als die Bildschirmbreite des Terminals ist. Ein Wert von 0 führt dazu, dass Übereinstimmungen einzeln pro Zeile angezeigt werden. Der Standardwert ist -1.

completion-ignore-case (Off)

Wenn auf Ein gesetzt, führt readline den Dateinamenabgleich und die Vervollständigung ohne Berücksichtigung der Groß-/Kleinschreibung durch.

completion-map-case (Off)

Wenn auf Ein gesetzt und completion-ignore-case aktiviert ist, behandelt readline Bindestriche (-) und Unterstriche (_ ). ) als äquivalent, wenn die Groß-/Kleinschreibung beim Abgleich und der Vervollständigung von Dateinamen berücksichtigt wird.

completion-prefix-display-length (0)

Die Länge des gemeinsamen Präfixes einer Liste möglicher Vervollständigungen in Zeichen, die ohne Änderung angezeigt wird. Bei einem Wert größer als Null werden allgemeine Präfixe, die länger als dieser Wert sind, bei der Anzeige möglicher Vervollständigungen durch Auslassungspunkte ersetzt.

completion-query-items (100)

Dies bestimmt, wann der Benutzer nach der Anzahl möglicher Vervollständigungen gefragt wird, die durch den Befehl possible-completions generiert werden. Es kann auf einen beliebigen ganzzahligen Wert größer oder gleich Null gesetzt werden. Wenn die Anzahl der möglichen Vervollständigungen größer oder gleich dem Wert dieser Variablen ist, fragt readline, ob der Benutzer sie sehen möchte oder nicht; andernfalls werden sie einfach auf dem Terminal aufgelistet.

convert-meta (On)

Wenn auf On gesetzt, konvertiert readline Zeichen, deren achtes Bit gesetzt ist, in eine ASCII-Schlüsselsequenz, indem das achte Bit entfernt und ein Escape-Zeichen vorangestellt wird (wobei Escape praktisch als Meta-Präfix verwendet wird). ). Der Standardwert ist Ein, aber readline setzt ihn auf Aus, wenn das Gebietsschema 8-Bit-Zeichen enthält.

disable-completion (Off)

Wenn es auf Ein gesetzt ist, verhindert readline die Wortvervollständigung. Vervollständigungszeichen werden in die Zeile eingefügt, als wären sie auf selbst einfügen abgebildet worden.

echo-control-characters (On)

Wenn es auf Ein gesetzt ist, gibt readline auf Betriebssystemen, die angeben, dass sie es unterstützen, ein Zeichen aus, das einem von der Tastatur generierten Signal entspricht.

editing-mode (emacs)

Steuert, ob readline mit einer Reihe von Tastenkombinationen ähnlich wie Emacs oder vi beginnt. Bearbeitungsmodus kann entweder auf emacs oder vi eingestellt werden.

emacs-mode-string (@)

Wenn die Variable show-mode-in-prompt aktiviert ist, wird diese Zeichenfolge unmittelbar vor der letzten Zeile der primären Eingabeaufforderung angezeigt, wenn der Emacs-Bearbeitungsmodus aktiv ist. Der Wert wird wie eine Tastenkombination erweitert, sodass der Standardsatz an Meta- und Steuerpräfixen sowie Backslash-Escape-Sequenzen verfügbar ist. Verwenden Sie die Escapezeichen \1 und \2, um Sequenzen nicht druckbarer Zeichen zu beginnen und zu beenden, die zum Einbetten einer Terminalsteuerungssequenz in die Moduszeichenfolge verwendet werden können.

enable-bracketed-paste (On)

Wenn es auf Ein gesetzt ist, konfiguriert readline das Terminal so, dass es jede Einfügung als einzelne Zeichenfolge in den Bearbeitungspuffer einfügen kann, anstatt jedes Zeichen so zu behandeln, als ob es gelesen worden wäre über die Tastatur. Dadurch kann verhindert werden, dass eingefügte Zeichen als Bearbeitungsbefehle interpretiert werden.

enable-keypad (Off)

Wenn es auf Ein gesetzt ist, versucht readline, die Anwendungstastatur zu aktivieren, wenn es aufgerufen wird. Einige Systeme benötigen dies, um die Pfeiltasten zu aktivieren.

enable-meta-key (On)

Wenn es auf Ein gesetzt ist, versucht readline, alle Meta-Modifiziererschlüssel zu aktivieren, die das Terminal beim Aufruf angeblich unterstützt. Auf vielen Terminals wird der Metaschlüssel zum Senden von 8-Bit-Zeichen verwendet.

expand-tilde (Off)

Wenn auf Ein gesetzt, wird die Tilde-Erweiterung durchgeführt, wenn readline versucht, ein Wort zu vervollständigen.

history-preserve-point (Off)

Wenn es auf Ein gesetzt ist, versucht der Verlaufscode, einen Punkt an derselben Stelle auf jeder Verlaufszeile zu platzieren, die mit previous-history oder next-history abgerufen wird .

history-size (unset)

Legen Sie die maximale Anzahl der in der Verlaufsliste gespeicherten Verlaufseinträge fest. Bei Null werden alle vorhandenen Verlaufseinträge gelöscht und keine neuen Einträge gespeichert. Bei einem Wert kleiner als Null ist die Anzahl der Verlaufseinträge nicht begrenzt. Standardmäßig ist die Anzahl der Verlaufseinträge auf den Wert der Shell-Variablen HISTSIZE festgelegt. Wenn versucht wird, history-size auf einen nicht numerischen Wert zu setzen, wird die maximale Anzahl der Verlaufseinträge auf 500 gesetzt.

horizontal-scroll-mode (Off)

Wenn diese Einstellung auf Ein gesetzt ist, verwendet readline eine einzelne Zeile für die Anzeige und scrollt die Eingabe horizontal auf einer einzelnen Bildschirmzeile, wenn sie länger als die Bildschirmbreite wird, anstatt in eine neue Zeile umzubrechen. Diese Einstellung ist für Terminals der Höhe 1 automatisch aktiviert.

input-meta (Off)

Wenn es auf On gesetzt ist, ermöglicht readline die 8-Bit-Eingabe (das heißt, das achte Bit wird nicht aus den gelesenen Zeichen entfernt), unabhängig davon, was das Terminal angeblich unterstützt. Der Name meta-flag ist ein Synonym für diese Variable. Der Standardwert ist Aus, aber readline setzt ihn auf Ein, wenn das Gebietsschema 8-Bit-Zeichen enthält.

isearch-terminators (``C-[C-J'')

Die Zeichenfolge, die eine inkrementelle Suche beenden soll, ohne dass das Zeichen anschließend als Befehl ausgeführt wird. Wenn dieser Variablen kein Wert zugewiesen wurde, beenden die Zeichen ESC und C-J eine inkrementelle Suche.

keymap (emacs)

Legen Sie die aktuelle Readline-Tastaturbelegung fest. Der Satz gültiger Keymap-Namen ist emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command und vi-insert. vi entspricht vi-command; emacs entspricht emacs-standard. Der Standardwert ist emacs; Der Wert von editing-mode wirkt sich auch auf die Standard-Keymap aus.

keyseq-timeout (500)

Gibt an, wie lange readline auf ein Zeichen wartet, wenn eine mehrdeutige Tastenfolge gelesen wird (eine Tastenfolge, die mithilfe der bisher gelesenen Eingaben eine vollständige Tastenfolge bilden kann oder zusätzliche Eingaben zur Vervollständigung einer längeren Tastenfolge erfordern kann). . Wenn innerhalb des Timeouts keine Eingabe empfangen wird, verwendet readline die kürzere, aber vollständige Tastenfolge. Der Wert wird in Millisekunden angegeben, ein Wert von 1000 bedeutet also, dass readline eine Sekunde auf weitere Eingaben wartet. Wenn diese Variable auf einen Wert kleiner oder gleich Null oder auf einen nicht numerischen Wert gesetzt ist, wartet readline, bis eine andere Taste gedrückt wird, um zu entscheiden, welche Tastenfolge abgeschlossen werden soll.

mark-directories (On)

Wenn diese Option auf Ein gesetzt ist, wird an vollständige Verzeichnisnamen ein Schrägstrich angehängt.

mark-modified-lines (Off)

Bei Einstellung auf Ein werden geänderte Verlaufszeilen mit einem vorangestellten Sternchen (*) angezeigt.

mark-symlinked-directories (Off)

Wenn auf Ein gesetzt, wird an vervollständigte Namen, die symbolische Links zu Verzeichnissen sind, ein Schrägstrich angehängt (abhängig vom Wert von mark-directories).

match-hidden-files (On)

Wenn diese Variable auf Ein gesetzt ist, führt sie dazu, dass readline mit Dateien übereinstimmt, deren Namen mit einem „“ beginnen. (versteckte Dateien) bei der Dateinamenvervollständigung. Wenn auf Aus gesetzt, wird das führende „.“ muss vom Benutzer im Dateinamen angegeben werden, damit er vervollständigt werden kann.

menu-complete-display-prefix (Off)

Bei Einstellung auf Ein zeigt die Menüvervollständigung das gemeinsame Präfix der Liste möglicher Vervollständigungen (die leer sein können) an, bevor die Liste durchlaufen wird.

output-meta (Off)

Wenn auf On gesetzt, zeigt readline Zeichen mit gesetztem achten Bit direkt und nicht als Escape-Sequenz mit Meta-Präfix an. Der Standardwert ist Aus, aber readline setzt ihn auf Ein, wenn das Gebietsschema 8-Bit-Zeichen enthält.

page-completions (On)

Wenn es auf Ein gesetzt ist, verwendet readline einen internen eher-ähnlichen Pager, um jeweils einen Bildschirm mit möglichen Abschlüssen anzuzeigen.

print-completions-horizontally (Off)

Wenn auf Ein gesetzt, zeigt readline Vervollständigungen mit Übereinstimmungen an, die horizontal in alphabetischer Reihenfolge und nicht nach unten auf dem Bildschirm sortiert sind.

revert-all-at-newline (Off)

Wenn auf On gesetzt, macht readline alle Änderungen an Verlaufszeilen rückgängig, bevor es zurückkehrt, wenn accept-line ausgeführt wird. Standardmäßig können Verlaufszeilen geändert werden und einzelne Rückgängig-Listen über Aufrufe von readline hinweg beibehalten.

show-all-if-ambiguous (Off)

Dadurch ändert sich das Standardverhalten der Vervollständigungsfunktionen. Wenn diese Option auf Ein gesetzt ist, werden die Übereinstimmungen bei Wörtern, die mehr als eine mögliche Vervollständigung haben, sofort aufgelistet, anstatt dass die Glocke klingelt.

show-all-if-unmodified (Off)

Dadurch wird das Standardverhalten der Vervollständigungsfunktionen ähnlich wie bei show-all-if-ambiguous geändert. Wenn diese Option auf Ein gesetzt ist, führen Wörter, die mehr als eine mögliche Vervollständigung ohne mögliche Teilvervollständigung haben (die möglichen Vervollständigungen haben kein gemeinsames Präfix), dazu, dass die Übereinstimmungen sofort aufgelistet werden, anstatt dass die Glocke klingelt.

show-mode-in-prompt (Off)

Wenn auf Ein gesetzt, fügen Sie am Anfang der Eingabeaufforderung eine Zeichenfolge hinzu, die den Bearbeitungsmodus angibt: Emacs, vi-Befehl oder vi-Einfügung. Die Moduszeichenfolgen können vom Benutzer festgelegt werden (z. B. emacs-mode-string).

skip-completed-text (Off)

Wenn diese Einstellung auf Ein gesetzt ist, ändert sich das Standardvervollständigungsverhalten beim Einfügen eines einzelnen Treffers in die Zeile. Es ist nur aktiv, wenn die Vervollständigung mitten in einem Wort ausgeführt wird. Wenn diese Option aktiviert ist, fügt readline keine Zeichen aus der Vervollständigung ein, die mit Zeichen nach der Stelle im zu vervollständigenden Wort übereinstimmen, sodass Teile des Wortes, die dem Cursor folgen, nicht dupliziert werden.

vi-cmd-mode-string ((cmd))

Wenn die Variable show-mode-in-prompt aktiviert ist, wird diese Zeichenfolge unmittelbar vor der letzten Zeile der primären Eingabeaufforderung angezeigt, wenn der VI-Bearbeitungsmodus aktiv ist und sich im Befehlsmodus befindet. Der Wert wird wie eine Tastenkombination erweitert, sodass der Standardsatz an Meta- und Steuerpräfixen sowie Backslash-Escape-Sequenzen verfügbar ist. Verwenden Sie die Escapezeichen \1 und \2, um Sequenzen nicht druckbarer Zeichen zu beginnen und zu beenden, die zum Einbetten einer Terminalsteuerungssequenz in die Moduszeichenfolge verwendet werden können.

vi-ins-mode-string ((ins))

Wenn die Variable show-mode-in-prompt aktiviert ist, wird diese Zeichenfolge unmittelbar vor der letzten Zeile der primären Eingabeaufforderung angezeigt, wenn der VI-Bearbeitungsmodus aktiv ist und sich im Einfügemodus befindet. Der Wert wird wie eine Tastenkombination erweitert, sodass der Standardsatz an Meta- und Steuerpräfixen sowie Backslash-Escape-Sequenzen verfügbar ist. Verwenden Sie die Escapezeichen \1 und \2, um Sequenzen nicht druckbarer Zeichen zu beginnen und zu beenden, die zum Einbetten einer Terminalsteuerungssequenz in die Moduszeichenfolge verwendet werden können.

visible-stats (Off)

Wenn auf Ein gesetzt, wird ein Zeichen, das den von stat(2) gemeldeten Dateityp angibt, an den Dateinamen angehängt, wenn mögliche Vervollständigungen aufgelistet werden.

Readline-bedingte Konstrukte

Readline implementiert eine Funktion, die im Geiste den bedingten Kompilierungsfunktionen des C-Präprozessors ähnelt und die Durchführung von Tastenbelegungen und Variableneinstellungen als Ergebnis von Tests ermöglicht. Es werden vier Parser-Anweisungen verwendet.

$if

Das $if-Konstrukt ermöglicht die Erstellung von Bindungen basierend auf dem Bearbeitungsmodus, dem verwendeten Terminal oder der Anwendung, die readline verwendet. Der Text des Tests reicht nach jedem Vergleichsoperator bis zum Ende der Zeile; Sofern nicht anders angegeben, sind zum Isolieren keine Zeichen erforderlich.

mode

Die mode=-Form der $if-Direktive wird verwendet, um zu testen, ob sich readline im Emacs- oder vi-Modus befindet. Dies kann in Verbindung mit dem Befehl set keymap verwendet werden, um beispielsweise nur Bindungen in den Tastaturbelegungen emacs-standard und emacs-ctlx festzulegen wenn readline im Emacs-Modus startet.

term

Die term=-Form kann verwendet werden, um terminalspezifische Tastenkombinationen einzuschließen, möglicherweise um die von den Funktionstasten des Terminals ausgegebenen Tastensequenzen zu binden. Das Wort auf der rechten Seite des = wird sowohl mit dem vollständigen Namen des Terminals als auch mit dem Teil des Terminalnamens vor dem ersten - verglichen. Dadurch kann sun beispielsweise sowohl mit sun als auch mit sun-cmd übereinstimmen.

version

Der Version-Test kann verwendet werden, um Vergleiche mit bestimmten Readline-Versionen durchzuführen. Die Version wird zur aktuellen Readline-Version erweitert. Zu den Vergleichsoperatoren gehören =, (und ==), !=, <=, >=, < und >. Die auf der rechten Seite des Operators angegebene Versionsnummer besteht aus einer Hauptversionsnummer, einem optionalen Dezimalpunkt und einer optionalen Nebenversion (z. B. 7.1). Wenn die Nebenversion weggelassen wird, wird davon ausgegangen, dass sie 0 ist. Der Operator kann durch Leerzeichen von der Zeichenfolge Version und vom Argument der Versionsnummer getrennt werden.

application

Das application-Konstrukt wird verwendet, um anwendungsspezifische Einstellungen einzuschließen. Jedes Programm, das die Readline-Bibliothek verwendet, legt den Anwendungsnamen fest, und eine Initialisierungsdatei kann auf einen bestimmten Wert testen. Dies könnte verwendet werden, um Tastenfolgen an Funktionen zu binden, die für ein bestimmtes Programm nützlich sind. Der folgende Befehl fügt beispielsweise eine Tastenfolge hinzu, die das aktuelle oder vorherige Wort in bash in Anführungszeichen setzt:

$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
variable

Das variable-Konstrukt bietet einfache Gleichheitstests für Readline-Variablen und -Werte. Die zulässigen Vergleichsoperatoren sind =, == und !=. Der Variablenname muss durch Leerzeichen vom Vergleichsoperator getrennt werden; Der Operator kann durch Leerzeichen vom Wert auf der rechten Seite getrennt werden. Es können sowohl String- als auch boolesche Variablen getestet werden. Boolesche Variablen müssen gegen die Werte on und off getestet werden.

$endif

Dieser Befehl beendet, wie im vorherigen Beispiel zu sehen ist, einen $if-Befehl.

$else

Befehle in diesem Zweig der $if-Direktive werden ausgeführt, wenn der Test fehlschlägt.

$include

Diese Direktive verwendet einen einzelnen Dateinamen als Argument und liest Befehle und Bindungen aus dieser Datei. Die folgende Anweisung würde beispielsweise /etc/inputrc lauten:

$include   /etc/inputrc

Suchen

Readline bietet Befehle zum Durchsuchen des Befehlsverlaufs (siehe VERLAUF unten) nach Zeilen, die eine bestimmte Zeichenfolge enthalten. Es gibt zwei Suchmodi: inkrementell und nicht inkrementell.

Inkrementelle Suchvorgänge beginnen, bevor der Benutzer mit der Eingabe der Suchzeichenfolge fertig ist. Während jedes Zeichen der Suchzeichenfolge eingegeben wird, zeigt readline den nächsten Eintrag aus dem Verlauf an, der mit der bisher eingegebenen Zeichenfolge übereinstimmt. Bei einer inkrementellen Suche sind nur so viele Zeichen erforderlich, wie zum Auffinden des gewünschten Verlaufseintrags erforderlich sind. Die im Wert der Variablen issearch-terminators enthaltenen Zeichen werden zum Beenden einer inkrementellen Suche verwendet. Wenn dieser Variablen kein Wert zugewiesen wurde, beenden die Zeichen Escape und Control-J eine inkrementelle Suche. Strg-G bricht eine inkrementelle Suche ab und stellt die ursprüngliche Zeile wieder her. Wenn die Suche beendet ist, wird der Verlaufseintrag, der die Suchzeichenfolge enthält, zur aktuellen Zeile.

Um weitere übereinstimmende Einträge in der Verlaufsliste zu finden, geben Sie je nach Bedarf Strg-S oder Strg-R ein. Dadurch wird im Verlauf vorwärts oder rückwärts nach dem nächsten Eintrag gesucht, der mit der bisher eingegebenen Suchzeichenfolge übereinstimmt. Jede andere Tastenfolge, die an einen Readline-Befehl gebunden ist, beendet die Suche und führt diesen Befehl aus. Beispielsweise beendet ein newline die Suche und akzeptiert die Zeile, wodurch der Befehl aus der Verlaufsliste ausgeführt wird.

Readline merkt sich die letzte inkrementelle Suchzeichenfolge. Wenn zwei Strg-Rs eingegeben werden, ohne dass dazwischenliegende Zeichen eine neue Suchzeichenfolge definieren, wird jede gespeicherte Suchzeichenfolge verwendet.

Bei nicht inkrementellen Suchvorgängen wird die gesamte Suchzeichenfolge gelesen, bevor mit der Suche nach übereinstimmenden Verlaufszeilen begonnen wird. Die Suchzeichenfolge kann vom Benutzer eingegeben werden oder Teil des Inhalts der aktuellen Zeile sein.

Readline-Befehlsnamen

Im Folgenden finden Sie eine Liste der Namen der Befehle und der Standardtastenfolgen, an die sie gebunden sind. Befehlsnamen ohne zugehörige Tastenfolge sind standardmäßig ungebunden. In den folgenden Beschreibungen bezieht sich point auf die aktuelle Cursorposition und mark auf eine Cursorposition, die durch den Befehl set-mark gespeichert wurde. Der Text zwischen Punkt und Markierung wird als Region bezeichnet.

Befehle zum Bewegen

beginning-of-line (C-a)

Zum Anfang der aktuellen Zeile wechseln.

end-of-line (C-e)

Gehen Sie zum Ende der Zeile.

forward-char (C-f)

Einen Charakter vorwärts bewegen.

backward-char (C-b)

Einen Charakter zurückbewegen.

forward-word (M-f)

Gehen Sie bis zum Ende des nächsten Wortes vor. Wörter bestehen aus alphanumerischen Zeichen (Buchstaben und Ziffern).

backward-word (M-b)

Gehen Sie zurück zum Anfang des aktuellen oder vorherigen Worts. Wörter bestehen aus alphanumerischen Zeichen (Buchstaben und Ziffern).

shell-forward-word

Gehen Sie bis zum Ende des nächsten Wortes vor. Wörter werden durch nicht in Anführungszeichen gesetzte Shell-Metazeichen begrenzt.

shell-backward-word

Gehen Sie zurück zum Anfang des aktuellen oder vorherigen Worts. Wörter werden durch nicht in Anführungszeichen gesetzte Shell-Metazeichen begrenzt.

previous-screen-line

Versuchen Sie, den Punkt auf die gleiche physische Bildschirmspalte in der vorherigen physischen Bildschirmzeile zu verschieben. Dies hat nicht den gewünschten Effekt, wenn die aktuelle Readline-Zeile nicht mehr als eine physische Zeile einnimmt oder wenn der Punkt nicht größer als die Länge der Eingabeaufforderung plus Bildschirmbreite ist.

next-screen-line

Versuchen Sie, den Punkt auf die gleiche physische Bildschirmspalte in der nächsten physischen Bildschirmzeile zu verschieben. Dies wird nicht den gewünschten Effekt haben, wenn die aktuelle Readline-Zeile nicht mehr als eine physische Zeile einnimmt oder wenn die Länge der aktuellen Readline-Zeile nicht größer ist als die Länge der Eingabeaufforderung plus der Bildschirmbreite.

clear-display (M-C-l)

Löschen Sie den Bildschirm und, wenn möglich, den Scrollback-Puffer des Terminals, zeichnen Sie dann die aktuelle Zeile neu und lassen Sie die aktuelle Zeile am oberen Bildschirmrand.

clear-screen (C-l)

Löschen Sie den Bildschirm, zeichnen Sie dann die aktuelle Zeile neu und lassen Sie die aktuelle Zeile am oberen Bildschirmrand. Aktualisieren Sie mit einem Argument die aktuelle Zeile, ohne den Bildschirm zu löschen.

redraw-current-line

Aktualisieren Sie die aktuelle Zeile.

Befehle zur Manipulation des Verlaufs

accept-line (Newline, Return)

Akzeptieren Sie die Zeile unabhängig davon, wo sich der Cursor befindet. Wenn diese Zeile nicht leer ist, fügen Sie sie entsprechend dem Status der Variablen HISTCONTROL zur Verlaufsliste hinzu. Wenn es sich bei der Zeile um eine geänderte Verlaufszeile handelt, stellen Sie den ursprünglichen Zustand der Verlaufszeile wieder her.

previous-history (C-p)

Rufen Sie den vorherigen Befehl aus der Verlaufsliste ab und gehen Sie in der Liste zurück.

next-history (C-n)

Rufen Sie den nächsten Befehl aus der Verlaufsliste ab und bewegen Sie sich in der Liste vorwärts.

beginning-of-history (M-<)

Gehen Sie zur ersten Zeile im Verlauf.

end-of-history (M->)

Gehen Sie zum Ende des Eingabeverlaufs, d. h. zur aktuell eingegebenen Zeile.

reverse-search-history (C-r)

Suchen Sie rückwärts, beginnend bei der aktuellen Zeile, und gehen Sie bei Bedarf nach oben durch den Verlauf. Dies ist eine inkrementelle Suche.

forward-search-history (C-s)

Suchen Sie vorwärts, beginnend bei der aktuellen Zeile, und gehen Sie bei Bedarf nach unten durch den Verlauf. Dies ist eine inkrementelle Suche.

non-incremental-reverse-search-history (M-p)

Durchsuchen Sie den Verlauf rückwärts, beginnend bei der aktuellen Zeile, und verwenden Sie dabei eine nicht inkrementelle Suche nach einer vom Benutzer angegebenen Zeichenfolge.

non-incremental-forward-search-history (M-n)

Durchsuchen Sie den Verlauf vorwärts mit einer nicht inkrementellen Suche nach einer vom Benutzer angegebenen Zeichenfolge.

history-search-forward

Durchsuchen Sie den Verlauf vorwärts nach der Zeichenfolge zwischen dem Anfang der aktuellen Zeile und dem Punkt. Dies ist eine nicht inkrementelle Suche.

history-search-backward

Durchsuchen Sie den Verlauf rückwärts nach der Zeichenfolge zwischen dem Anfang der aktuellen Zeile und dem Punkt. Dies ist eine nicht inkrementelle Suche.

history-substring-search-backward

Durchsuchen Sie den Verlauf rückwärts nach der Zeichenfolge zwischen dem Anfang der aktuellen Zeile und der aktuellen Cursorposition (dem Punkt). Die Suchzeichenfolge kann überall in einer Verlaufszeile übereinstimmen. Dies ist eine nicht inkrementelle Suche.

history-substring-search-forward

Durchsuchen Sie den Verlauf vorwärts nach der Zeichenfolge zwischen dem Anfang der aktuellen Zeile und dem Punkt. Die Suchzeichenfolge kann überall in einer Verlaufszeile übereinstimmen. Dies ist eine nicht inkrementelle Suche.

yank-nth-arg (M-C-y)

Fügen Sie das erste Argument des vorherigen Befehls (normalerweise das zweite Wort in der vorherigen Zeile) an Punkt ein. Fügen Sie mit einem Argument n das nte Wort aus dem vorherigen Befehl ein (die Wörter im vorherigen Befehl beginnen mit Wort 0). Ein negatives Argument fügt das nte Wort vom Ende des vorherigen Befehls ein. Sobald das Argument n berechnet wurde, wird das Argument extrahiert, als ob die Verlaufserweiterung „!n“ angegeben worden wäre.

yank-last-arg (M-. , M-_ )

Fügen Sie das letzte Argument zum vorherigen Befehl ein (das letzte Wort des vorherigen Verlaufseintrags). Verhalten Sie sich bei einem numerischen Argument genau wie yank-nth-arg. Aufeinanderfolgende Aufrufe von yank-last-arg bewegen sich zurück durch die Verlaufsliste und fügen nacheinander das letzte Wort (oder das durch das Argument des ersten Aufrufs angegebene Wort) jeder Zeile ein. Jedes für diese aufeinanderfolgenden Aufrufe bereitgestellte numerische Argument bestimmt die Richtung, in der sich der Verlauf durchläuft. Ein negatives Argument ändert die Richtung im Verlauf (zurück oder vorwärts). Die Funktionen zur Verlaufserweiterung werden verwendet, um das letzte Wort zu extrahieren, als ob die Verlaufserweiterung „!$“ angegeben worden wäre.

shell-expand-line (M-C-e)

Erweitern Sie die Linie wie die Shell. Dies führt eine Alias- und Verlaufserweiterung sowie alle Shellworterweiterungen durch. Eine Beschreibung der Verlaufserweiterung finden Sie unten unter HISTORY EXPANSION.

history-expand-line (M-^)

Führen Sie eine Verlaufserweiterung für die aktuelle Zeile durch. Eine Beschreibung der Verlaufserweiterung finden Sie unten unter HISTORY EXPANSION.

magic-space

Führen Sie eine Verlaufserweiterung für die aktuelle Zeile durch und fügen Sie ein Leerzeichen ein. Eine Beschreibung der Verlaufserweiterung finden Sie unten unter HISTORY EXPANSION.

alias-expand-line

Führen Sie eine Alias-Erweiterung für die aktuelle Zeile durch. Eine Beschreibung der Alias-Erweiterung finden Sie oben unter ALIASES.

history-and-alias-expand-line

Führen Sie eine Verlaufs- und Aliaserweiterung für die aktuelle Zeile durch.

insert-last-argument (M-. , M-_ )

Ein Synonym für yank-last-arg.

operate-and-get-next (C-o)

Akzeptieren Sie die aktuelle Zeile zur Ausführung und rufen Sie die nächste Zeile relativ zur aktuellen Zeile aus dem Verlauf zur Bearbeitung ab. Wenn ein numerisches Argument angegeben wird, gibt es den Verlaufseintrag an, der anstelle der aktuellen Zeile verwendet werden soll.

edit-and-execute-command (C-x C-e)

Rufen Sie in der aktuellen Befehlszeile einen Editor auf und führen Sie das Ergebnis als Shell-Befehle aus. Bash versucht, $VISUAL, $EDITOR und emacs als Editor in dieser Reihenfolge aufzurufen.

Befehle zum Ändern von Text

end-of-file (usually C-d)

Das Zeichen, das das Ende der Datei angibt, wie es beispielsweise durch „stty“ festgelegt wird. Wenn dieses Zeichen gelesen wird, obwohl sich keine Zeichen in der Zeile befinden und der Punkt am Anfang der Zeile steht, interpretiert Readline es als Ende der Eingabe und gibt EOF zurück.

delete-char (C-d)

Löschen Sie das Zeichen an der Stelle. Wenn diese Funktion an dasselbe Zeichen wie das tty-EOF-Zeichen gebunden ist, wie es bei C-d üblich ist, siehe oben für die Auswirkungen.

backward-delete-char (Rubout)

Löschen Sie das Zeichen hinter dem Cursor. Wenn ein numerisches Argument angegeben wird, wird der gelöschte Text im Kill-Ring gespeichert.

forward-backward-delete-char

Löschen Sie das Zeichen unter dem Cursor, es sei denn, der Cursor befindet sich am Ende der Zeile. In diesem Fall wird das Zeichen hinter dem Cursor gelöscht.

quoted-insert (C-q, C-v)

Fügen Sie das nächste eingegebene Zeichen wörtlich zur Zeile hinzu. So fügen Sie beispielsweise Zeichen wie C-q ein.

tab-insert (C-v TAB)

Fügen Sie ein Tabulatorzeichen ein.

self-insert (a, b, A, 1, !, ...)

Geben Sie das eingegebene Zeichen ein.

transpose-chars (C-t)

Ziehen Sie das Zeichen vor dem Punkt nach vorne über das Zeichen am Punkt und verschieben Sie dabei auch den Punkt nach vorne. Wenn der Punkt am Ende der Zeile steht, werden die beiden Zeichen vor dem Punkt vertauscht. Negative Argumente haben keine Wirkung.

transpose-words (M-t)

Ziehen Sie das Wort vor dem Punkt über das Wort nach dem Punkt hinaus und bewegen Sie den Punkt auch über dieses Wort. Wenn der Punkt am Ende der Zeile steht, werden die letzten beiden Wörter in der Zeile vertauscht.

upcase-word (M-u)

Schreiben Sie das aktuelle (oder folgende) Wort in Großbuchstaben. Bei einem negativen Argument schreiben Sie das vorherige Wort in Großbuchstaben, aber verschieben Sie den Punkt nicht.

downcase-word (M-l)

Das aktuelle (oder folgende) Wort klein schreiben. Bei einem negativen Argument schreiben Sie das vorherige Wort klein, aber verschieben Sie den Punkt nicht.

capitalize-word (M-c)

Schreiben Sie das aktuelle (oder folgende) Wort groß. Bei einem negativen Argument schreiben Sie das vorherige Wort groß, aber verschieben Sie den Punkt nicht.

overwrite-mode

Überschreibmodus umschalten. Wechselt mit einem expliziten positiven numerischen Argument in den Überschreibmodus. Wechselt mit einem expliziten nicht positiven numerischen Argument in den Einfügemodus. Dieser Befehl betrifft nur den emacs-Modus; Der vi-Modus überschreibt anders. Jeder Aufruf von readline() beginnt im Einfügemodus. Im Überschreibmodus ersetzen Zeichen, die an die Selbsteinfügung gebunden sind, den Text an der richtigen Stelle, anstatt ihn nach rechts zu verschieben. An backward-delete-char gebundene Zeichen ersetzen das Zeichen vor dem Punkt durch ein Leerzeichen. Standardmäßig ist dieser Befehl ungebunden.

Töten und Zerren

kill-line (C-k)

Töte den Text vom Punkt bis zum Ende der Zeile.

backward-kill-line (C-x Rubout)

Töte rückwärts zum Anfang der Zeile.

unix-line-discard (C-u)

Töte rückwärts vom Punkt zum Anfang der Linie. Der getötete Text wird auf dem Kill-Ring gespeichert.

kill-whole-line

Töte alle Zeichen in der aktuellen Zeile, egal wo sich der Punkt befindet.

kill-word (M-d)

Töte vom Punkt bis zum Ende des aktuellen Wortes oder, wenn zwischen Wörtern, bis zum Ende des nächsten Wortes. Wortgrenzen sind die gleichen wie bei forward-word.

backward-kill-word (M-Rubout)

Töte das Wort hinter dem Punkt. Wortgrenzen sind die gleichen wie bei backward-word.

shell-kill-word

Töte vom Punkt bis zum Ende des aktuellen Wortes oder, wenn zwischen Wörtern, bis zum Ende des nächsten Wortes. Wortgrenzen sind die gleichen wie bei shell-forward-word.

shell-backward-kill-word

Töte das Wort hinter dem Punkt. Wortgrenzen sind die gleichen wie bei shell-backward-word.

unix-word-rubout (C-w)

Töten Sie das Wort hinter dem Punkt und verwenden Sie Leerzeichen als Wortgrenze. Der getötete Text wird auf dem Kill-Ring gespeichert.

unix-filename-rubout

Töten Sie das Wort hinter dem Punkt und verwenden Sie Leerzeichen und den Schrägstrich als Wortgrenzen. Der getötete Text wird auf dem Kill-Ring gespeichert.

delete-horizontal-space (M-\)

Löschen Sie alle Leerzeichen und Tabulatoren um den Punkt herum.

kill-region

Töte den Text in der aktuellen Region.

copy-region-as-kill

Kopieren Sie den Text in der Region in den Kill-Puffer.

copy-backward-word

Kopieren Sie das Wort vor dem Punkt in den Kill-Puffer. Die Wortgrenzen sind die gleichen wie bei backward-word.

copy-forward-word

Kopieren Sie das Wort, das dem Punkt folgt, in den Kill-Puffer. Die Wortgrenzen sind die gleichen wie bei forward-word.

yank (C-y)

Ziehen Sie die Oberseite des Abschussrings an der Spitze in den Puffer.

yank-pop (M-y)

Drehen Sie den Tötungsring und ziehen Sie das neue Oberteil ab. Funktioniert nur nach yank oder yank-pop.

Numerische Argumente

digit-argument (M-0, M-1, ..., M--)

Fügen Sie diese Ziffer dem bereits angesammelten Argument hinzu oder beginnen Sie ein neues Argument. M-- beginnt ein negatives Argument.

universal-argument

Dies ist eine weitere Möglichkeit, ein Argument anzugeben. Wenn diesem Befehl eine oder mehrere Ziffern folgen, optional mit einem führenden Minuszeichen, definieren diese Ziffern das Argument. Wenn auf den Befehl Ziffern folgen, wird durch die erneute Ausführung von universal-argument das numerische Argument beendet, andernfalls wird es ignoriert. Als Sonderfall gilt: Wenn auf diesen Befehl unmittelbar ein Zeichen folgt, das weder eine Ziffer noch ein Minuszeichen ist, wird die Argumentanzahl für den nächsten Befehl mit vier multipliziert. Die Anzahl der Argumente ist anfänglich eins. Wenn Sie diese Funktion also zum ersten Mal ausführen, zählt das Argument vier, beim zweiten Mal zählt das Argument sechzehn und so weiter.

Abschließen

complete (TAB)

Versuchen Sie, den Text vor dem Punkt zu vervollständigen. Bash versucht die Vervollständigung und behandelt den Text als Variable (wenn der Text mit $ beginnt), Benutzername (wenn der Text mit ~ beginnt) und Hostname (wenn der Text mit @ beginnt) oder Befehl (einschließlich Aliase und Funktionen) nacheinander. Wenn keiner dieser Punkte zu einer Übereinstimmung führt, wird versucht, den Dateinamen zu vervollständigen.

possible-completions (M-?)

Listen Sie vor Punkt die möglichen Vervollständigungen des Textes auf.

insert-completions (M-*)

Fügen Sie vor dem Punkt alle Vervollständigungen des Textes ein, die durch possible-completions generiert worden wären.

menu-complete

Ähnlich wie complete, ersetzt jedoch das zu vervollständigende Wort durch eine einzelne Übereinstimmung aus der Liste möglicher Vervollständigungen. Wiederholte Ausführung von menu-complete-Schritten durch die Liste möglicher Vervollständigungen, wobei nacheinander jede Übereinstimmung eingefügt wird. Am Ende der Vervollständigungsliste wird die Glocke geläutet (vorbehaltlich der Einstellung bell-style) und der Originaltext wird wiederhergestellt. Ein Argument von n verschiebt n Positionen in der Liste der Übereinstimmungen nach vorne; Ein negatives Argument kann verwendet werden, um rückwärts durch die Liste zu gehen. Dieser Befehl soll an TAB gebunden werden, ist jedoch standardmäßig ungebunden.

menu-complete-backward

Identisch mit menu-complete, bewegt sich jedoch rückwärts durch die Liste möglicher Vervollständigungen, als ob menu-complete ein negatives Argument erhalten hätte. Dieser Befehl ist standardmäßig ungebunden.

delete-char-or-list

Löscht das Zeichen unter dem Cursor, wenn es sich nicht am Anfang oder Ende der Zeile befindet (wie delete-char). Wenn es am Ende der Zeile steht, verhält es sich genauso wie possible-completions. Dieser Befehl ist standardmäßig ungebunden.

complete-filename (M-/)

Versuchen Sie, den Dateinamen für den Text vor dem Punkt zu vervollständigen.

possible-filename-completions (C-x /)

Listen Sie die möglichen Vervollständigungen des Textes vor dem Punkt auf und behandeln Sie ihn als Dateinamen.

complete-username (M-~)

Versuchen Sie, den Text vor dem Punkt zu vervollständigen und behandeln Sie ihn als Benutzernamen.

possible-username-completions (C-x ~)

Listen Sie vor dem Punkt die möglichen Vervollständigungen des Textes auf und behandeln Sie ihn als Benutzernamen.

complete-variable (M-$)

Versuchen Sie, den Text vor dem Punkt zu vervollständigen und ihn als Shell-Variable zu behandeln.

possible-variable-completions (C-x $)

Listen Sie die möglichen Vervollständigungen des Textes vor dem Punkt auf und behandeln Sie ihn als Shell-Variable.

complete-hostname (M-@)

Versuchen Sie, den Text vor dem Punkt zu vervollständigen und ihn als Hostnamen zu behandeln.

possible-hostname-completions (C-x @)

Listen Sie die möglichen Vervollständigungen des Textes vor dem Punkt auf und behandeln Sie ihn als Hostnamen.

complete-command (M-!)

Versuchen Sie, den Text vor dem Punkt zu vervollständigen, und behandeln Sie ihn als Befehlsnamen. Bei der Befehlsvervollständigung wird versucht, den Text in dieser Reihenfolge mit Aliasen, reservierten Wörtern, Shell-Funktionen, Shell-Builtins und schließlich ausführbaren Dateinamen abzugleichen.

possible-command-completions (C-x !)

Listen Sie die möglichen Vervollständigungen des Textes vor dem Punkt auf und behandeln Sie ihn als Befehlsnamen.

dynamic-complete-history (M-TAB)

Versuchen Sie, den Text vor dem Punkt zu vervollständigen, und vergleichen Sie den Text mit Zeilen aus der Verlaufsliste auf mögliche Vervollständigungsübereinstimmungen.

dabbrev-expand

Versuchen Sie, den Text vor dem Punkt zu vervollständigen, indem Sie den Text mit Zeilen aus der Verlaufsliste auf mögliche Übereinstimmungen mit der Vervollständigung vergleichen.

complete-into-braces (M-{)

Führen Sie die Vervollständigung des Dateinamens durch und fügen Sie die Liste der möglichen Vervollständigungen in geschweiften Klammern ein, damit die Liste für die Shell verfügbar ist (siehe Klammererweiterung oben).

Tastaturmakros

start-kbd-macro (C-x ( )

Beginnen Sie mit dem Speichern der in das aktuelle Tastaturmakro eingegebenen Zeichen.

end-kbd-macro (C-x ) )

Beenden Sie das Speichern der in das aktuelle Tastaturmakro eingegebenen Zeichen und speichern Sie die Definition.

call-last-kbd-macro (C-x e)

Führen Sie das zuletzt definierte Tastaturmakro erneut aus, indem Sie dafür sorgen, dass die Zeichen im Makro so aussehen, als ob sie über die Tastatur eingegeben würden.

print-last-kbd-macro ()

Drucken Sie das zuletzt definierte Tastaturmakro in einem Format, das für die Datei inputrc geeignet ist.

Sonstig

re-read-init-file (C-x C-r)

Lesen Sie den Inhalt der Datei inputrc ein und integrieren Sie alle dort gefundenen Bindungen oder Variablenzuweisungen.

abort (C-g)

Brechen Sie den aktuellen Bearbeitungsbefehl ab und klingeln Sie am Terminal (vorbehaltlich der Einstellung bell-style).

do-lowercase-version (M-A, M-B, M-x, ...)

Wenn das metafizierte Zeichen x ein Großbuchstabe ist, führen Sie den Befehl aus, der an das entsprechende metafizierte Kleinbuchstabenzeichen gebunden ist. Das Verhalten ist undefiniert, wenn x bereits ein Kleinbuchstabe ist.

prefix-meta (ESC)

Metafizieren Sie das nächste eingegebene Zeichen.

ESC f entspricht Meta-f.

undo (C-_, C-x C-u)

Inkrementelles Rückgängigmachen, separat für jede Zeile gespeichert.

revert-line (M-r)

Machen Sie alle an dieser Zeile vorgenommenen Änderungen rückgängig. Dies ist so, als würde man den Befehl Rückgängig so oft ausführen, dass die Zeile wieder in ihren ursprünglichen Zustand zurückkehrt.

tilde-expand (M-&)

Führen Sie eine Tilde-Erweiterung für das aktuelle Wort durch.

set-mark (C-@, M-<space>)

Setzen Sie die Markierung auf den Punkt. Wenn ein numerisches Argument angegeben wird, wird die Markierung auf diese Position gesetzt.

exchange-point-and-mark (C-x C-x)

Tauschen Sie den Punkt mit der Markierung aus. Die aktuelle Cursorposition wird auf die gespeicherte Position gesetzt und die alte Cursorposition wird als Markierung gespeichert.

character-search (C-])

Ein Zeichen wird gelesen und der Punkt wird zum nächsten Vorkommen dieses Zeichens verschoben. Bei einer negativen Zählung wird nach früheren Vorkommen gesucht.

character-search-backward (M-C-])

Ein Zeichen wird gelesen und der Punkt wird zum vorherigen Vorkommen dieses Zeichens verschoben. Bei einer negativen Zählung wird nach nachfolgenden Vorkommen gesucht.

skip-csi-sequence

Lesen Sie genügend Zeichen, um eine Sequenz mit mehreren Tasten zu verwenden, wie sie beispielsweise für Tasten wie „Pos1“ und „Ende“ definiert sind. Solche Sequenzen beginnen mit einem Control Sequence Indicator (CSI), normalerweise ESC-[. Wenn diese Sequenz an „\[“ gebunden ist, haben Schlüssel, die solche Sequenzen erzeugen, keine Wirkung, sofern sie nicht explizit an einen Readline-Befehl gebunden sind, anstatt verirrte Zeichen in den Bearbeitungspuffer einzufügen. Dies ist standardmäßig ungebunden, normalerweise jedoch an ESC-[ gebunden.

insert-comment (M-#)

Ohne ein numerisches Argument wird der Wert der readline-Variable comment-begin am Anfang der aktuellen Zeile eingefügt. Wenn ein numerisches Argument angegeben wird, fungiert dieser Befehl als Umschalter: Wenn die Zeichen am Anfang der Zeile nicht mit dem Wert von comment-begin übereinstimmen, wird der Wert eingefügt, andernfalls werden die Zeichen in comment-begin werden am Anfang der Zeile gelöscht. In beiden Fällen wird die Zeile so akzeptiert, als ob eine neue Zeile eingegeben worden wäre. Der Standardwert von comment-begin bewirkt, dass dieser Befehl die aktuelle Zeile in einen Shell-Kommentar umwandelt. Wenn ein numerisches Argument dazu führt, dass das Kommentarzeichen entfernt wird, wird die Zeile von der Shell ausgeführt.

glob-complete-word (M-g)

Das Wort vor dem Punkt wird als Muster für die Pfadnamenerweiterung behandelt, wobei implizit ein Sternchen angehängt ist. Dieses Muster wird verwendet, um eine Liste übereinstimmender Dateinamen für mögliche Vervollständigungen zu erstellen.

glob-expand-word (C-x *)

Das Wort vor dem Punkt wird als Muster für die Pfadnamenerweiterung behandelt und die Liste der übereinstimmenden Dateinamen wird eingefügt, wodurch das Wort ersetzt wird. Wenn ein numerisches Argument angegeben wird, wird vor der Pfadnamenerweiterung ein Sternchen angehängt.

glob-list-expansions (C-x g)

Die Liste der Erweiterungen, die von glob-expand-word generiert worden wären, wird angezeigt und die Zeile wird neu gezeichnet. Wenn ein numerisches Argument angegeben wird, wird vor der Pfadnamenerweiterung ein Sternchen angehängt.

dump-functions

Drucken Sie alle Funktionen und ihre Tastenbelegungen in den Readline-Ausgabestream. Wenn ein numerisches Argument angegeben wird, wird die Ausgabe so formatiert, dass sie Teil einer inputrc-Datei gemacht werden kann.

dump-variables

Drucken Sie alle einstellbaren Readline-Variablen und ihre Werte in den Readline-Ausgabestream. Wenn ein numerisches Argument angegeben wird, wird die Ausgabe so formatiert, dass sie Teil einer inputrc-Datei gemacht werden kann.

dump-macros

Gibt alle an Makros gebundenen Readline-Tastenfolgen und die von ihnen ausgegebenen Zeichenfolgen aus. Wenn ein numerisches Argument angegeben wird, wird die Ausgabe so formatiert, dass sie Teil einer inputrc-Datei gemacht werden kann.

display-shell-version (C-x C-v)

Versionsinformationen zur aktuellen Instanz von bash anzeigen.

Programmierbare Vervollständigung

Wenn versucht wird, ein Wort für ein Argument eines Befehls zu vervollständigen, für den eine Vervollständigungsspezifikation (eine compspec) mithilfe der integrierten Funktion complete definiert wurde (siehe SHELL BUILTIN COMMANDS<). unten) werden die programmierbaren Vervollständigungsfunktionen aufgerufen.

Zunächst wird der Befehlsname identifiziert. Wenn das Befehlswort eine leere Zeichenfolge ist (Vervollständigung am Anfang einer leeren Zeile versucht), wird jede Compspec verwendet, die mit der Option -E zum Vervollständigen definiert wurde. Wenn für diesen Befehl eine Compspec definiert wurde, wird die Compspec verwendet, um die Liste möglicher Vervollständigungen für das Wort zu generieren. Wenn das Befehlswort ein vollständiger Pfadname ist, wird zuerst nach einer Compspec für den vollständigen Pfadnamen gesucht. Wenn für den vollständigen Pfadnamen keine Compspec gefunden wird, wird versucht, eine Compspec für den Teil nach dem letzten Schrägstrich zu finden. Wenn diese Suchvorgänge nicht zu einer Compspec führen, wird jede Compspec, die mit der Option -D zum Vervollständigen definiert wurde, als Standard verwendet. Wenn es keine Standard-Compspec gibt, versucht bash als letzten Ausweg eine Alias-Erweiterung für das Befehlswort und versucht, aus jeder erfolgreichen Erweiterung eine Compspec für das Befehlswort zu finden.

Sobald eine Compspec gefunden wurde, wird sie zum Generieren der Liste der passenden Wörter verwendet. Wenn keine Compspec gefunden wird, wird die standardmäßige Bash-Vervollständigung wie oben unter Abschließen beschrieben durchgeführt.

Zunächst werden die durch die Compspec spezifizierten Aktionen verwendet. Es werden nur Treffer zurückgegeben, denen das zu vervollständigende Wort vorangestellt ist. Wenn die Option -f oder -d zur Vervollständigung von Dateinamen oder Verzeichnisnamen verwendet wird, wird die Shell-Variable FIGNORE zum Filtern der Übereinstimmungen verwendet.

Als nächstes werden alle Vervollständigungen generiert, die durch ein Pfadnamen-Erweiterungsmuster für die Option -G angegeben werden. Die durch das Muster erzeugten Wörter müssen nicht mit dem zu vervollständigenden Wort übereinstimmen. Die Shell-Variable GLOBIGNORE wird nicht zum Filtern der Übereinstimmungen verwendet, sondern die Variable FIGNORE.

Als nächstes wird die als Argument für die Option -W angegebene Zeichenfolge berücksichtigt. Die Zeichenfolge wird zunächst unter Verwendung der Zeichen in der Sondervariablen IFS als Trennzeichen aufgeteilt. Das Zitieren von Shell wird geehrt. Jedes Wort wird dann mithilfe von Klammererweiterung, Tildeerweiterung, Parameter- und Variablenerweiterung, Befehlsersetzung und arithmetischer Erweiterung erweitert, wie oben unter ERWEITERUNG beschrieben. Die Ergebnisse werden nach den oben unter Wortaufteilung beschriebenen Regeln aufgeteilt. Die Ergebnisse der Erweiterung werden mit dem Präfix des zu vervollständigenden Wortes abgeglichen, und die passenden Wörter werden zu den möglichen Vervollständigungen.

Nachdem diese Übereinstimmungen generiert wurden, wird jede Shell-Funktion oder jeder Shell-Befehl aufgerufen, der mit den Optionen -F und -C angegeben wurde. Wenn der Befehl oder die Funktion aufgerufen wird, werden den Variablen COMP_LINE, COMP_POINT, COMP_KEY und COMP_TYPE Werte zugewiesen oben unter Shell-Variablen beschrieben. Wenn eine Shell-Funktion aufgerufen wird, werden auch die Variablen COMP_WORDS und COMP_CWORD gesetzt. Wenn die Funktion oder der Befehl aufgerufen wird, ist das erste Argument ($1) der Name des Befehls, dessen Argumente vervollständigt werden, das zweite Argument ($2) ist das Wort Being abgeschlossen, und das dritte Argument ($3) ist das Wort vor dem Wort, das in der aktuellen Befehlszeile vervollständigt wird. Es wird keine Filterung der generierten Vervollständigungen anhand des zu vervollständigenden Wortes durchgeführt; Die Funktion oder der Befehl hat bei der Generierung der Übereinstimmungen völlige Freiheit.

Jede mit -F angegebene Funktion wird zuerst aufgerufen. Die Funktion kann alle Shell-Funktionen verwenden, einschließlich der unten beschriebenen integrierten Funktion compgen, um die Übereinstimmungen zu generieren. Die möglichen Vervollständigungen müssen in die Array-Variable COMPREPLY eingefügt werden, eine pro Array-Element.

Als nächstes wird jeder mit der Option -C angegebene Befehl in einer Umgebung aufgerufen, die der Befehlsersetzung entspricht. Es sollte eine Liste der Vervollständigungen, eine pro Zeile, auf der Standardausgabe ausgeben. Bei Bedarf kann ein Backslash als Escapezeichen für einen Zeilenumbruch verwendet werden.

Nachdem alle möglichen Vervollständigungen generiert wurden, wird jeder mit der Option -X angegebene Filter auf die Liste angewendet. Der Filter ist ein Muster, wie es für die Pfadnamenerweiterung verwendet wird; Ein & im Muster wird durch den Text des zu vervollständigenden Wortes ersetzt. Ein wörtliches & kann mit einem Backslash maskiert werden; Der Backslash wird entfernt, bevor eine Übereinstimmung versucht wird. Jede Vervollständigung, die dem Muster entspricht, wird aus der Liste entfernt. Ein führendes ! negiert das Muster; In diesem Fall werden alle Vervollständigungen, die nicht zum Muster passen, entfernt. Wenn die Shell-Option nocasematch aktiviert ist, wird der Abgleich ohne Rücksicht auf die Groß-/Kleinschreibung alphabetischer Zeichen durchgeführt.

Schließlich werden alle mit den Optionen -P und -S angegebenen Präfixe und Suffixe zu jedem Mitglied der Vervollständigungsliste hinzugefügt und das Ergebnis wird als an den Readline-Vervollständigungscode zurückgegeben die Liste der möglichen Vervollständigungen.

Wenn die zuvor angewendeten Aktionen keine Übereinstimmungen generieren und die Option -o dirnames zum Vervollständigen angegeben wurde, als die Compspec definiert wurde, wird versucht, den Verzeichnisnamen zu vervollständigen.

Wenn die Option -o plusdirs zum Vervollständigen beim Definieren der Compspec angegeben wurde, wird versucht, den Verzeichnisnamen zu vervollständigen, und alle Übereinstimmungen werden zu den Ergebnissen der anderen Aktionen hinzugefügt.

Wenn eine Compspec gefunden wird, wird standardmäßig alles, was sie generiert, als vollständiger Satz möglicher Vervollständigungen an den Abschlusscode zurückgegeben. Die standardmäßigen Bash-Vervollständigungen werden nicht versucht und die Readline-Standardvervollständigung für die Dateinamenvervollständigung ist deaktiviert. Wenn die Option -o bashdefault zum Vervollständigen bereitgestellt wurde, als die Compspec definiert wurde, werden die bash-Standardvervollständigungen versucht, wenn die Compspec keine Übereinstimmungen generiert. Wenn die Option -o default zum Abschließen angegeben wurde, als die Compspec definiert wurde, wird die Standardvervollständigung von readline durchgeführt, wenn die Compspec (und, falls versucht, die Standardvervollständigung bash-Vervollständigungen) generieren keine Übereinstimmungen.

Wenn eine Compspec angibt, dass eine Vervollständigung des Verzeichnisnamens gewünscht ist, zwingen die programmierbaren Vervollständigungsfunktionen readline, einen Schrägstrich an vervollständigte Namen anzuhängen, die symbolische Links zu Verzeichnissen sind, abhängig vom Wert der Readline-Variable mark-directories. unabhängig von der Einstellung der Readline-Variable mark-symlinked-directories.

Es gibt eine gewisse Unterstützung für die dynamische Änderung von Vervollständigungen. Dies ist am nützlichsten, wenn es in Kombination mit einer Standardvervollständigung verwendet wird, die mit complete -D angegeben wird. Shell-Funktionen, die als Abschlusshandler ausgeführt werden, können angeben, dass der Abschluss erneut versucht werden soll, indem sie den Exit-Status 124 zurückgeben. Wenn eine Shell-Funktion 124 zurückgibt und die Compspec ändert, die dem Befehl zugeordnet ist, für den der Abschluss versucht wird (als erster bereitgestellt). Argument, wenn die Funktion ausgeführt wird), beginnt die programmierbare Vervollständigung von vorne mit dem Versuch, eine neue Compspec für diesen Befehl zu finden. Dadurch kann eine Reihe von Vervollständigungen dynamisch erstellt werden, wenn eine Vervollständigung versucht wird, anstatt alle auf einmal zu laden.

Unter der Annahme, dass es beispielsweise eine Bibliothek mit Compspecs gibt, die jeweils in einer Datei gespeichert sind, die dem Namen des Befehls entspricht, würde die folgende Standardvervollständigungsfunktion Vervollständigungen dynamisch laden:

_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124

Complete -D -F _completion_loader -o bashdefault -o default

GESCHICHTE

Wenn die Option -o History für das integrierte set aktiviert ist, bietet die Shell Zugriff auf den Befehlsverlauf, die Liste der zuvor eingegebenen Befehle. Der Wert der Variablen HISTSIZE wird als Anzahl der in einer Verlaufsliste zu speichernden Befehle verwendet. Der Text der letzten HISTSIZE-Befehle (Standard 500) wird gespeichert.

Die Shell speichert jeden Befehl in der Verlaufsliste vor der Parameter- und Variablenerweiterung (siehe EXPANSION oben), aber nach der Verlaufserweiterung, abhängig von den Werten der Shell-Variablen HISTIGNORE und HISTCONTROL.

Beim Start wird der Verlauf aus der Datei initialisiert, die durch die Variable HISTFILE (Standard ~/.bash_history) benannt wird. Die durch den Wert von HISTFILE benannte Datei wird bei Bedarf so gekürzt, dass sie nicht mehr als die durch den Wert von HISTFILESIZE angegebene Anzahl von Zeilen enthält. Wenn HISTFILESIZE nicht festgelegt oder auf Null, einen nicht numerischen Wert oder einen numerischen Wert kleiner als Null gesetzt ist, wird die Verlaufsdatei nicht abgeschnitten.

Beim Lesen der Verlaufsdatei werden Zeilen, die mit dem Verlaufskommentarzeichen beginnen, gefolgt von einer Ziffer, als Zeitstempel für die folgende Verlaufszeile interpretiert. Diese Zeitstempel werden optional abhängig vom Wert der Variablen HISTTIMEFORMAT angezeigt. Wenn eine Shell mit aktiviertem Verlauf beendet wird, werden die letzten $HISTSIZE-Zeilen aus der Verlaufsliste nach $HISTFILE kopiert.

Wenn die Shell-Option histappend aktiviert ist (siehe die Beschreibung von shopt unter SHELL BUILTIN COMMANDS unten), werden die Zeilen an die Verlaufsdatei angehängt. andernfalls wird die Verlaufsdatei überschrieben. Wenn HISTFILE nicht festgelegt ist oder die Verlaufsdatei nicht beschreibbar ist, wird der Verlauf nicht gespeichert. Wenn die Variable HISTTIMEFORMAT festgelegt ist, werden Zeitstempel in die Verlaufsdatei geschrieben und mit dem Verlaufskommentarzeichen markiert, sodass sie über Shell-Sitzungen hinweg erhalten bleiben können. Dabei wird das Verlaufskommentarzeichen verwendet, um Zeitstempel von anderen Verlaufszeilen zu unterscheiden.

Nach dem Speichern des Verlaufs wird die Verlaufsdatei so gekürzt, dass sie nicht mehr als HISTFILESIZE-Zeilen enthält. Wenn HISTFILESIZE nicht festgelegt oder auf Null, einen nicht numerischen Wert oder einen numerischen Wert kleiner als Null gesetzt ist, wird die Verlaufsdatei nicht abgeschnitten.

Der eingebaute Befehl fc (siehe SHELL BUILTIN COMMANDS unten) kann verwendet werden, um einen Teil der Verlaufsliste aufzulisten, zu bearbeiten und erneut auszuführen. Der integrierte Verlauf kann verwendet werden, um die Verlaufsliste anzuzeigen oder zu ändern und die Verlaufsdatei zu bearbeiten. Bei Verwendung der Befehlszeilenbearbeitung stehen in jedem Bearbeitungsmodus Suchbefehle zur Verfügung, die Zugriff auf die Verlaufsliste ermöglichen.

Die Shell ermöglicht die Kontrolle darüber, welche Befehle in der Verlaufsliste gespeichert werden. Die Variablen HISTCONTROL und HISTIGNORE können so eingestellt werden, dass die Shell nur eine Teilmenge der eingegebenen Befehle speichert. Wenn die Shell-Option cmdhist aktiviert ist, versucht die Shell, jede Zeile eines mehrzeiligen Befehls im selben Verlaufseintrag zu speichern und fügt bei Bedarf Semikolons hinzu, um die syntaktische Korrektheit zu gewährleisten. Die Shell-Option lithist bewirkt, dass die Shell den Befehl mit eingebetteten Zeilenumbrüchen statt Semikolons speichert. Weitere Informationen zum Festlegen und Deaktivieren von Shell-Optionen finden Sie in der Beschreibung des shopt-Builtins unten unter SHELL BUILTIN COMMANDS.

GESCHICHTE-ERWEITERUNG

Die Shell unterstützt eine Verlaufserweiterungsfunktion, die der Verlaufserweiterung in csh ähnelt. In diesem Abschnitt wird beschrieben, welche Syntaxfunktionen verfügbar sind. Diese Funktion ist standardmäßig für interaktive Shells aktiviert und kann mit der Option +H für den integrierten Befehl set deaktiviert werden (siehe BUILTIN-BEFEHLE VON SHELL). unter). Nicht interaktive Shells führen standardmäßig keine Verlaufserweiterung durch.

Verlaufserweiterungen fügen Wörter aus der Verlaufsliste in den Eingabestream ein und erleichtern so das Wiederholen von Befehlen, das Einfügen der Argumente eines vorherigen Befehls in die aktuelle Eingabezeile oder das schnelle Beheben von Fehlern in vorherigen Befehlen.

Die Verlaufserweiterung wird unmittelbar nach dem Lesen einer vollständigen Zeile durchgeführt, bevor die Shell sie in Wörter aufteilt, und wird für jede Zeile einzeln durchgeführt, ohne Anführungszeichen in vorherigen Zeilen zu berücksichtigen. Es findet in zwei Teilen statt. Die erste besteht darin, zu bestimmen, welche Zeile aus der Verlaufsliste bei der Ersetzung verwendet werden soll. Die zweite besteht darin, Teile dieser Zeile auszuwählen, um sie in die aktuelle Zeile aufzunehmen. Die aus dem Verlauf ausgewählte Zeile ist das Ereignis, und die Teile dieser Zeile, auf die reagiert wird, sind Wörter. Zur Manipulation der ausgewählten Wörter stehen verschiedene Modifikatoren zur Verfügung. Die Zeile wird auf die gleiche Weise wie beim Lesen der Eingabe in Wörter aufgeteilt, sodass mehrere durch Metazeichen getrennte Wörter, die in Anführungszeichen stehen, als ein Wort betrachtet werden. Verlaufserweiterungen werden durch das Erscheinen des Verlaufserweiterungszeichens eingeleitet, das standardmäßig  !  ist. Nur Backslash ( \ ) und einfache Anführungszeichen können das Verlaufserweiterungszeichen in Anführungszeichen setzen, aber das Verlaufserweiterungszeichen wird auch als Anführungszeichen behandelt, wenn es unmittelbar vor dem schließenden doppelten Anführungszeichen in einer Zeichenfolge in doppelte Anführungszeichen steht.

Mehrere Zeichen verhindern die Verlaufserweiterung, wenn sie unmittelbar nach dem Verlaufserweiterungszeichen gefunden werden, auch wenn sie nicht in Anführungszeichen stehen: Leerzeichen, Tabulator, Zeilenumbruch, Wagenrücklauf und =. Wenn die Shell-Option extglob aktiviert ist, verhindert ( auch die Erweiterung.

Mehrere Shell-Optionen, die mit der shopt-Integration eingestellt werden können, können verwendet werden, um das Verhalten der Verlaufserweiterung anzupassen. Wenn die histverify-Shell-Option aktiviert ist (siehe die Beschreibung des integrierten shopt-Moduls unten) und readline verwendet wird, erfolgen Verlaufsersetzungen nicht sofort an den Shell-Parser übergeben. Stattdessen wird die erweiterte Zeile zur weiteren Änderung erneut in den Bearbeitungspuffer readline geladen. Wenn readline verwendet wird und die histreet-Shell-Option aktiviert ist, wird eine fehlgeschlagene Verlaufsersetzung zur Korrektur erneut in den readline-Bearbeitungspuffer geladen. Die Option -p des integrierten Befehls history kann verwendet werden, um zu sehen, was eine Verlaufserweiterung bewirkt, bevor sie verwendet wird. Mit der Option -s der integrierten Funktion history können Befehle am Ende der Verlaufsliste hinzugefügt werden, ohne sie tatsächlich auszuführen, sodass sie für einen späteren Abruf verfügbar sind.

Die Shell ermöglicht die Steuerung der verschiedenen Zeichen, die vom Verlaufserweiterungsmechanismus verwendet werden (siehe die Beschreibung von histchars oben unter Shell-Variablen). Die Shell verwendet das Verlaufskommentarzeichen, um beim Schreiben der Verlaufsdatei Verlaufszeitstempel zu markieren.

Ereignisbezeichner

Ein Ereignisbezeichner ist ein Verweis auf einen Befehlszeileneintrag in der Verlaufsliste. Sofern die Referenz nicht absolut ist, beziehen sich Ereignisse auf die aktuelle Position in der Verlaufsliste.

!

Starten Sie eine Verlaufsersetzung, es sei denn, darauf folgt ein Leerzeichen, ein Zeilenumbruch, ein Wagenrücklauf,=oder ( (wenn die extglob-Shell-Option mit dem shopt -Befehl aktiviert ist). eingebaut).

!n

Siehe Befehlszeile n.

!-n

Beziehen Sie sich auf den aktuellen Befehl minus n.

!!

Siehe den vorherigen Befehl. Dies ist ein Synonym für „!-1“.

!string

Verweisen Sie auf den letzten Befehl vor der aktuellen Position in der Verlaufsliste, beginnend mit string.

!?string[?]

Verweisen Sie auf den letzten Befehl vor der aktuellen Position in der Verlaufsliste, der string enthält. Das abschließende ? kann weggelassen werden, wenn auf string unmittelbar ein Zeilenumbruch folgt. Wenn string fehlt, wird der String aus der letzten Suche verwendet; Es handelt sich um einen Fehler, wenn keine vorherige Suchzeichenfolge vorhanden ist.

^string1^string2^

Schnelle Auswechslung. Wiederholen Sie den vorherigen Befehl und ersetzen Sie string1 durch string2. Entspricht „!!:s^string1^string2^“ (siehe Modifikatoren unten).

!#

Die gesamte Befehlszeile wurde bisher eingegeben.

Wortbezeichner

Wortbezeichner werden verwendet, um gewünschte Wörter aus dem Ereignis auszuwählen. Ein : trennt die Ereignisspezifikation vom Wortbezeichner. Es kann weggelassen werden, wenn der Wortbezeichner mit einem ^, $, *, - oder %. Wörter werden vom Zeilenanfang an nummeriert, wobei das erste Wort mit 0 (Null) gekennzeichnet wird. Wörter werden durch einzelne Leerzeichen getrennt in die aktuelle Zeile eingefügt.

0 (zero)

Das nullte Wort. Für die Shell ist dies das Befehlswort.

n

Das nte Wort.

^

Das erste Argument. Das heißt, Wort 1.

$

Das letzte Wort. Dies ist normalerweise das letzte Argument, wird jedoch bis zum nullten Wort erweitert, wenn die Zeile nur ein Wort enthält.

%

Das erste Wort, das mit dem aktuellsten „?string?“ übereinstimmt. Suche, wenn die Suchzeichenfolge mit einem Zeichen beginnt, das Teil eines Wortes ist.

x-y

Eine Reihe von Wörtern; „-y“ kürzt „0-y“ ab.

*

Alle Wörter bis auf das nullte. Dies ist ein Synonym für „1-$“. Es ist kein Fehler, * zu verwenden, wenn das Ereignis nur ein Wort enthält. In diesem Fall wird der leere String zurückgegeben.

x*

Abkürzung für x-$.

x-

Kürzet x-$ wie x* ab, lässt aber das letzte Wort weg. Wenn x fehlt, wird standardmäßig 0 verwendet.

Wenn ein Wortbezeichner ohne Ereignisangabe angegeben wird, wird der vorherige Befehl als Ereignis verwendet.

Modifikatoren

Nach dem optionalen Wortbezeichner kann eine Folge von einem oder mehreren der folgenden Modifikatoren erscheinen, denen jeweils ein „:“ vorangestellt ist. Diese modifizieren oder bearbeiten das Wort oder die Wörter, die aus dem Verlaufsereignis ausgewählt wurden.

h

Entfernen Sie eine nachgestellte Dateinamenkomponente und lassen Sie nur den Kopf übrig.

t

Entfernen Sie alle führenden Dateinamenkomponenten und lassen Sie das Ende übrig.

r

Entfernen Sie ein abschließendes Suffix der Form .xxx und lassen Sie den Basisnamen übrig.

e

Entfernen Sie alle bis auf das nachgestellte Suffix.

p

Geben Sie den neuen Befehl aus, führen Sie ihn jedoch nicht aus.

q

Zitieren Sie die ersetzten Wörter und vermeiden Sie weitere Ersetzungen.

x

Zitieren Sie die ersetzten Wörter wie bei q, aber teilen Sie die Wörter an Leerzeichen und Zeilenumbrüchen auf. Die Modifikatoren q und x schließen sich gegenseitig aus; Es wird das zuletzt gelieferte verwendet.

s/old/new/

Ersetzen Sie new für das erste Vorkommen von old in der Ereigniszeile. Anstelle von/kann jedes beliebige Zeichen als Trennzeichen verwendet werden. Das letzte Trennzeichen ist optional, wenn es das letzte Zeichen der Ereigniszeile ist. Das Trennzeichen kann in old und new mit einem einzelnen Backslash in Anführungszeichen gesetzt werden. Wenn & in neu vorkommt, wird es durch alt ersetzt. Ein einzelner Backslash zitiert das &. Wenn old null ist, wird es auf den zuletzt ersetzten old gesetzt, oder, wenn in der Vergangenheit keine historischen Ersetzungen stattgefunden haben, auf den letzten string in a !?string[?] Suche. Wenn new null ist, wird jedes übereinstimmende old gelöscht.

&

Wiederholen Sie die vorherige Ersetzung.

g

Bewirken, dass Änderungen auf die gesamte Ereigniszeile angewendet werden. Dies wird in Verbindung mit „:s“ verwendet (z. B. „:gs/old/). new/') oder `:&'. Bei Verwendung mit „:s“ kann anstelle von/ein beliebiges Trennzeichen verwendet werden, und das letzte Trennzeichen ist optional, wenn es das letzte Zeichen der Ereigniszeile ist. Ein a kann als Synonym für g verwendet werden.

G

Wenden Sie den folgenden Modifizierer „s“ oder „&“ einmal auf jedes Wort in der Ereigniszeile an.

Integrierte Shell-Befehle

Sofern nicht anders angegeben, akzeptiert jeder integrierte Befehl, der in diesem Abschnitt als akzeptierende Optionen mit vorangestelltem - dokumentiert ist, --, um das Ende der Optionen anzuzeigen. Die integrierten Funktionen :, true, false und test/[] werden nicht akzeptiert Optionen und behandeln Sie -- nicht speziell. Das exit, logout, return, break, continue, let und shift-Einbauten akzeptieren und verarbeiten Argumente, die mit - beginnen, ohne dass -- erforderlich ist. Andere integrierte Funktionen, die Argumente akzeptieren, aber nicht als akzeptierende Optionen angegeben sind, interpretieren Argumente, die mit - beginnen, als ungültige Optionen und erfordern --, um diese Interpretation zu verhindern.

: [arguments]

Kein Effekt; Der Befehl führt nichts weiter aus, als Argumente zu erweitern und alle angegebenen Umleitungen durchzuführen. Der Rückgabestatus ist Null.

.  filename [arguments]
source filename [arguments]

Befehle von Dateiname in der aktuellen Shell-Umgebung lesen und ausführen und den Exit-Status des zuletzt von Dateiname ausgeführten Befehls zurückgeben. Wenn Dateiname keinen Schrägstrich enthält, werden Dateinamen in PATH verwendet, um das Verzeichnis zu finden, das Dateiname enthält. Die in PATH gesuchte Datei muss nicht ausführbar sein. Wenn sich bash nicht im Posix-Modus befindet, wird das aktuelle Verzeichnis durchsucht, wenn keine Datei im PATH gefunden wird. Wenn die Option sourcepath für den integrierten Befehl shopt deaktiviert ist, wird der PATH nicht durchsucht. Wenn Argumente angegeben werden, werden sie zu Positionsparametern, wenn Dateiname ausgeführt wird.

Ansonsten bleiben die Positionsparameter unverändert. Wenn die Option -T aktiviert ist, erbt source alle Traps bei DEBUG; Ist dies nicht der Fall, wird jede DEBUG-Trap-Zeichenfolge gespeichert und rund um den Aufruf von source wiederhergestellt, und source setzt die DEBUG-Funktion zurück. trap während der Ausführung. Wenn -T nicht festgelegt ist und die Quelldatei den DEBUG-Trap ändert, wird der neue Wert beibehalten, wenn source abgeschlossen ist. Der Rückgabestatus ist der Status des letzten im Skript beendeten Befehls (0, wenn keine Befehle ausgeführt werden) und false, wenn Dateiname nicht gefunden wird oder nicht gelesen werden kann.

alias [-p] [name[=value] ...]

Alias ohne Argumente oder mit der Option -p gibt die Liste der Aliase in der Form alias name=< ausvalue auf der Standardausgabe. Bei der Angabe von Argumenten wird für jeden Namen, dessen Wert angegeben ist, ein Alias definiert. Ein nachgestelltes Leerzeichen in value bewirkt, dass beim Erweitern des Alias das nächste Wort auf Alias-Ersetzung überprüft wird. Für jeden Namen in der Argumentliste, für den kein Wert angegeben ist, werden der Name und der Wert des Alias gedruckt. Alias gibt true zurück, es sei denn, es wird ein Name angegeben, für den kein Alias definiert wurde.

bg [jobspec ...]

Setzen Sie jeden angehaltenen Job jobspec im Hintergrund fort, als ob er mit & gestartet worden wäre. Wenn jobspec nicht vorhanden ist, wird die Shell-Vorstellung des aktuellen Jobs verwendet. bg jobspec gibt 0 zurück, es sei denn, es wird ausgeführt, wenn die Jobsteuerung deaktiviert ist, oder bei Ausführung mit aktivierter Jobsteuerung wurde keine angegebene jobspec gefunden oder gestartet ohne Arbeitsplatzkontrolle.

bind [-m keymap] [-lpsvPSVX]
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] keyseq:function-name
bind [-m keymap] keyseq:readline-command

Aktuelle readline-Tasten- und Funktionsbindungen anzeigen, eine Tastenfolge an eine readline-Funktion oder ein readline-Makro binden oder eine readline-Variable festlegen. Jedes Nicht-Optionsargument ist ein Befehl, wie er in .inputrc erscheinen würde, aber jede Bindung oder jeder Befehl muss als separates Argument übergeben werden; z. B. „\C-x\C-r“: re-read-init-file“. Optionen haben, sofern angegeben, die folgende Bedeutung:

-m keymap

Verwenden Sie keymap als Keymap, die von den nachfolgenden Bindungen betroffen sein soll. Akzeptable keymap-Namen sind emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command und vi-insert. vi entspricht vi-command (vi-move ist auch ein Synonym); emacs entspricht emacs-standard.

-l

Listen Sie die Namen aller readline-Funktionen auf.

-p

Zeigen Sie readline-Funktionsnamen und -Bindungen so an, dass sie erneut gelesen werden können.

-P

Aktuelle readline-Funktionsnamen und -Bindungen auflisten.

-s

An Makros gebundene readline-Tastenfolgen und die von ihnen ausgegebenen Zeichenfolgen so anzeigen, dass sie erneut gelesen werden können.

-S

An Makros gebundene readline-Tastensequenzen und die von ihnen ausgegebenen Zeichenfolgen anzeigen.

-v

Zeigen Sie readline-Variablennamen und -werte so an, dass sie erneut gelesen werden können.

-V

Aktuelle Namen und Werte der readline-Variablen auflisten.

-f filename

Tastenkombinationen aus Dateiname lesen.

-q function

Abfrage, welche Tasten die benannte Funktion aufrufen.

-u function

Lösen Sie die Bindung aller an die benannte Funktion gebundenen Schlüssel.

-r keyseq

Entfernen Sie alle aktuellen Bindungen für keyseq.

-x keyseq:shell-command

Bewirkt, dass Shell-Befehl immer dann ausgeführt wird, wenn keyseq eingegeben wird. Wenn Shell-Befehl ausgeführt wird, setzt die Shell die Variable READLINE_LINE auf den Inhalt des Zeilenpuffers readline und des READLINE_POINT- und READLINE_MARK-Variablen an die aktuelle Position des Einfügepunkts bzw. den gespeicherten Einfügepunkt (die Markierung) an.

Wenn der ausgeführte Befehl den Wert von READLINE_LINE, READLINE_POINT oder READLINE_MARK ändert, werden diese neuen Werte im Bearbeitungsstatus widergespiegelt.

-X

Listen Sie alle an Shell-Befehle gebundenen Tastenfolgen und die zugehörigen Befehle in einem Format auf, das als Eingabe wiederverwendet werden kann.

Der Rückgabewert ist 0, es sei denn, es wurde eine nicht erkannte Option angegeben oder es ist ein Fehler aufgetreten.

break [n]

Beenden Sie eine for-, while-, until- oder select-Schleife. Wenn n angegeben ist, unterbrechen Sie n Ebenen. n muss ≥ 1 sein. Wenn n größer als die Anzahl der umschließenden Schleifen ist, werden alle umschließenden Schleifen verlassen. Der Rückgabewert ist 0, es sei denn, n ist nicht größer oder gleich 1.

builtin shell-builtin [arguments]

Führt die angegebene eingebaute Shell aus, übergibt ihr Argumente und gibt ihren Exit-Status zurück. Dies ist nützlich, wenn Sie eine Funktion definieren, deren Name mit einem Shell-Built-In übereinstimmt, wobei die Funktionalität des Built-Ins innerhalb der Funktion erhalten bleibt. Die integrierte cd wird üblicherweise auf diese Weise neu definiert. Der Rückgabestatus ist „false“, wenn shell-builtin kein in die Shell integrierter Befehl ist.

caller [expr]

Gibt den Kontext jedes aktiven Unterprogrammaufrufs zurück (eine Shell-Funktion oder ein Skript, das mit den integrierten Funktionen . oder source ausgeführt wird). Ohne expr zeigt caller die Zeilennummer und den Quelldateinamen des aktuellen Unterprogrammaufrufs an. Wenn als expr eine nicht negative Ganzzahl angegeben wird, zeigt caller die Zeilennummer, den Unterprogrammnamen und die Quelldatei an, die dieser Position im aktuellen Ausführungsaufrufstapel entsprechen. Diese zusätzlichen Informationen können beispielsweise zum Drucken eines Stack-Trace verwendet werden. Der aktuelle Frame ist Frame 0. Der Rückgabewert ist 0, es sei denn, die Shell führt keinen Unterprogrammaufruf aus oder expr entspricht keiner gültigen Position im Aufrufstapel.

cd [-L|[-P [-e]] [-@]] [dir]

Ändern Sie das aktuelle Verzeichnis in dir. Wenn dir nicht angegeben wird, ist der Wert der Shell-Variable HOME der Standardwert. Alle weiteren Argumente nach dir werden ignoriert. Die Variable CDPATH definiert den Suchpfad für das Verzeichnis, das dir enthält: Jeder Verzeichnisname in CDPATH wird nach dir durchsucht .

Alternative Verzeichnisnamen in CDPATH werden durch einen Doppelpunkt (:) getrennt. Ein Null-Verzeichnisname in CDPATH ist derselbe wie das aktuelle Verzeichnis, d. h. „.“. Wenn dir mit einem Schrägstrich (/) beginnt, wird CDPATH nicht verwendet. Die Option -P bewirkt, dass cd die physische Verzeichnisstruktur verwendet, indem symbolische Links beim Durchlaufen von dir und vor der Verarbeitung von Instanzen von aufgelöst werden. in dir (siehe auch die Option -P zum integrierten Befehl set); Die Option -L erzwingt, dass symbolischen Links gefolgt wird, indem der Link nach der Verarbeitung von Instanzen von .. in dir aufgelöst wird.

Wenn .. in dir erscheint, wird es verarbeitet, indem die unmittelbar vorherige Pfadnamenkomponente aus dir entfernt wird, zurück zu einem Schrägstrich oder dem Anfang von <dir. Wenn die Option -e mit -P bereitgestellt wird und das aktuelle Arbeitsverzeichnis nach einem erfolgreichen Verzeichniswechsel nicht erfolgreich ermittelt werden kann, wird cd zurückgegeben ein erfolgloser Status. Auf Systemen, die dies unterstützen, stellt die Option -@ die erweiterten Attribute einer Datei als Verzeichnis dar.

Ein Argument von - wird in $OLDPWD konvertiert, bevor der Verzeichniswechsel versucht wird. Wenn ein nicht leerer Verzeichnisname aus CDPATH verwendet wird oder wenn - das erste Argument ist und der Verzeichniswechsel erfolgreich ist, lautet der absolute Pfadname des neuen Arbeitsverzeichnisses in die Standardausgabe geschrieben. Der Rückgabewert ist wahr, wenn das Verzeichnis erfolgreich geändert wurde; sonst falsch.

command [-pVv] command [arg ...]

Führen Sie command mit args aus, um die normale Shell-Funktionssuche zu unterdrücken. Nur integrierte Befehle oder Befehle, die im PATH gefunden werden, werden ausgeführt. Wenn die Option -p angegeben ist, wird die Suche nach command unter Verwendung eines Standardwerts für PATH durchgeführt, der garantiert den gesamten Standard findet Dienstprogramme. Wenn entweder die Option -V oder -v angegeben wird, wird eine Beschreibung des Befehls gedruckt.

Die Option -v bewirkt, dass ein einzelnes Wort angezeigt wird, das den Befehl oder Dateinamen angibt, der zum Aufrufen von command verwendet wird. Die Option -V erzeugt eine ausführlichere Beschreibung. Wenn die Option -V oder -v angegeben wird, ist der Exit-Status 0, wenn Befehl gefunden wurde, und 1, wenn nicht. Wenn keine Option angegeben wird und ein Fehler aufgetreten ist oder Befehl nicht gefunden werden kann, ist der Exit-Status 127. Andernfalls ist der Exit-Status des integrierten Befehls der Exit-Status von <Befehl.

compgen [option] [word]

Generieren Sie mögliche Vervollständigungsübereinstimmungen für Wort gemäß den Optionens. Dabei kann es sich um jede Option handeln, die von der complete-Integration akzeptiert wird, mit Ausnahme von -p und -r und schreiben Sie die Übereinstimmungen in die Standardausgabe. Bei Verwendung der Optionen -F oder -C haben die verschiedenen Shell-Variablen, die von den programmierbaren Vervollständigungsfunktionen festgelegt werden, zwar verfügbar, aber keine nützlichen Werte.

Die Übereinstimmungen werden auf die gleiche Weise generiert, als ob der programmierbare Abschlusscode sie direkt aus einer Abschlussspezifikation mit denselben Flags generiert hätte. Wenn word angegeben ist, werden nur die Vervollständigungen angezeigt, die mit word übereinstimmen.

Der Rückgabewert ist wahr, es sei denn, eine ungültige Option wird angegeben oder es wurden keine Übereinstimmungen generiert.

complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action] [-G globpat] [-W wordlist]
[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
complete -pr [-DEI] [name ...]

Geben Sie an, wie Argumente für jeden Namen vervollständigt werden sollen. Wenn die Option -p angegeben wird oder keine Optionen angegeben werden, werden vorhandene Vervollständigungsspezifikationen so gedruckt, dass sie als Eingabe wiederverwendet werden können. Die Option -r entfernt eine Vervollständigungsspezifikation für jeden Namen oder, wenn keine Namens angegeben werden, alle Vervollständigungsspezifikationen. Die Option -D gibt an, dass andere bereitgestellte Optionen und Aktionen auf die „Standard“-Befehlsvervollständigung angewendet werden sollen; Das heißt, es wurde versucht, einen Befehl abzuschließen, für den zuvor kein Abschluss definiert wurde. Die Option -E gibt an, dass andere bereitgestellte Optionen und Aktionen auf die „leere“ Befehlsvervollständigung angewendet werden sollen; das heißt, der Abschluss wurde in einer leeren Zeile versucht. Die Option -I gibt an, dass andere bereitgestellte Optionen und Aktionen auf die Vervollständigung des ersten Nichtzuweisungsworts in der Zeile oder nach einem Befehlstrennzeichen wie ; oder < angewendet werden sollen|, was normalerweise die Vervollständigung des Befehlsnamens ist. Wenn mehrere Optionen angegeben werden, hat die Option -D Vorrang vor -E und beide haben Vorrang vor -I. Wenn eines von -D, -E oder -I angegeben wird, werden alle anderen name-Argumente ignoriert; Diese Vervollständigungen gelten nur für den durch die Option angegebenen Fall.

Der Prozess der Anwendung dieser Vervollständigungsspezifikationen, wenn versucht wird, ein Wort zu vervollständigen, ist oben unter Programmierbare Vervollständigung beschrieben.

Andere Optionen haben, sofern angegeben, die folgende Bedeutung. Die Argumente für die Optionen -G, -W und -X (und ggf. -P). > und -S-Optionen) sollten in Anführungszeichen gesetzt werden, um sie vor der Erweiterung zu schützen, bevor das complete-Built-In aufgerufen wird.

-o comp-option

Die comp-option steuert mehrere Aspekte des Verhaltens der Compspec über die einfache Generierung von Vervollständigungen hinaus. comp-option kann eine von Folgendem sein:

bashdefault

Führen Sie die restlichen Standard-Bash-Vervollständigungen aus, wenn die Compspec keine Übereinstimmungen generiert.

default

Verwenden Sie die Standard-Dateinamenvervollständigung von readline, wenn die Compspec keine Übereinstimmungen generiert.

dirnames

Führen Sie die Vervollständigung des Verzeichnisnamens durch, wenn die Compspec keine Übereinstimmungen generiert.

filenames

Teilen Sie readline mit, dass die Compspec Dateinamen generiert, damit sie jede dateinamenspezifische Verarbeitung durchführen kann (z. B. das Hinzufügen eines Schrägstrichs zu Verzeichnisnamen, die Anführung von Sonderzeichen oder das Unterdrücken von nachgestellten Leerzeichen). Soll mit Shell-Funktionen verwendet werden.

noquote

Weisen Sie readline an, die vollständigen Wörter nicht in Anführungszeichen zu setzen, wenn es sich um Dateinamen handelt (die Standardeinstellung ist die Angabe von Dateinamen in Anführungszeichen).

nosort

Weisen Sie readline an, die Liste der möglichen Vervollständigungen nicht alphabetisch zu sortieren.

nospace

Weisen Sie readline an, den am Ende der Zeile abgeschlossenen Wörtern kein Leerzeichen (Standardeinstellung) hinzuzufügen.

plusdirs

Nachdem alle durch die Compspec definierten Übereinstimmungen generiert wurden, wird versucht, den Verzeichnisnamen zu vervollständigen, und alle Übereinstimmungen werden zu den Ergebnissen der anderen Aktionen hinzugefügt.

-A action

Die Aktion kann eine der folgenden sein, um eine Liste möglicher Abschlüsse zu erstellen:

alias

Aliasnamen. Kann auch als -a angegeben werden.

arrayvar

Namen von Array-Variablen.

binding

Readline-Tastenbindungsnamen.

builtin

Namen der in der Shell integrierten Befehle. Kann auch als -b angegeben werden.

command

Befehlsnamen. Kann auch als -c angegeben werden.

directory

Verzeichnisnamen. Kann auch als -d angegeben werden.

disabled

Namen deaktivierter Shell-Builtins.

enabled

Namen der aktivierten Shell-Builtins.

export

Namen der exportierten Shell-Variablen. Kann auch als -e angegeben werden.

file

Dateinamen. Kann auch als -f angegeben werden.

function

Namen von Shell-Funktionen.

group

Gruppennamen. Kann auch als -g angegeben werden.

helptopic

Hilfethemen, die von der integrierten Hilfe akzeptiert werden.

hostname

Hostnamen, wie sie aus der Datei entnommen werden, die durch die Shell-Variable HOSTFILE angegeben wird.

job

Jobnamen, wenn die Jobsteuerung aktiv ist. Kann auch als -j angegeben werden.

keyword

Shell reservierte Wörter. Kann auch als -k angegeben werden.

running

Namen laufender Jobs, wenn die Jobsteuerung aktiv ist.

service

Dienstnamen. Kann auch als -s angegeben werden.

setopt

Gültige Argumente für die Option -o für das integrierte set.

shopt

Shell-Optionsnamen, wie sie vom eingebauten shopt akzeptiert werden.

signal

Signalnamen.

stopped

Namen gestoppter Jobs, wenn die Jobsteuerung aktiv ist.

user

Benutzernamen. Kann auch als -u angegeben werden.

variable

Namen aller Shell-Variablen. Kann auch als -v angegeben werden.

-C command

Befehl wird in einer Subshell-Umgebung ausgeführt und seine Ausgabe wird als mögliche Vervollständigung verwendet.

-F function

Die Shell-Funktion function wird in der aktuellen Shell-Umgebung ausgeführt. Wenn die Funktion ausgeführt wird, ist das erste Argument ($1) der Name des Befehls, dessen Argumente vervollständigt werden, das zweite Argument ($2) ist das Wort, das vervollständigt wird. und das dritte Argument ($3) ist das Wort vor dem Wort, das in der aktuellen Befehlszeile vervollständigt wird. Wenn der Vorgang abgeschlossen ist, werden die möglichen Vervollständigungen aus dem Wert der Array-Variablen COMPREPLY abgerufen.

-G globpat

Das Pfadnamen-Erweiterungsmuster globpat wird erweitert, um die möglichen Vervollständigungen zu generieren.

-P prefix

Präfix wird zu Beginn jeder möglichen Vervollständigung hinzugefügt, nachdem alle anderen Optionen angewendet wurden.

-S suffix

Suffix wird an jede mögliche Vervollständigung angehängt, nachdem alle anderen Optionen angewendet wurden.

-W wordlist

Die Wortliste wird mithilfe der Zeichen in der speziellen Variablen IFS als Trennzeichen aufgeteilt und jedes resultierende Wort wird erweitert. Shell-Anführungszeichen werden in wordlist berücksichtigt, um einen Mechanismus bereitzustellen, mit dem Wörter Shell-Metazeichen oder Zeichen im Wert von IFS enthalten können. Die möglichen Vervollständigungen sind die Mitglieder der resultierenden Liste, die mit dem zu vervollständigenden Wort übereinstimmen.

-X filterpat

filterpat ist ein Muster, das zur Pfadnamenerweiterung verwendet wird. Es wird auf die Liste möglicher Vervollständigungen angewendet, die durch die vorherigen Optionen und Argumente generiert wurden, und jede Vervollständigung, die mit filterpat übereinstimmt, wird aus der Liste entfernt. Ein führendes ! in filterpat negiert das Muster; In diesem Fall wird jede Vervollständigung, die nicht mit filterpat übereinstimmt, entfernt.

Der Rückgabewert ist wahr, es sei denn, es wird eine ungültige Option angegeben, eine andere Option als -p oder -r wird ohne ein name-Argument angegeben Es wird versucht, eine Vervollständigungsspezifikation für einen Namen zu entfernen, für den keine Spezifikation vorhanden ist, oder beim Hinzufügen einer Vervollständigungsspezifikation tritt ein Fehler auf.

compopt [-o option] [-DEI] [+o option] [name]

Ändern Sie die Abschlussoptionen für jeden Namen gemäß den Optionens oder für den aktuell ausgeführten Abschluss, wenn keine Namens angegeben werden. Wenn keine Optionens angegeben sind, werden die Vervollständigungsoptionen für jeden Namen oder die aktuelle Vervollständigung angezeigt. Die möglichen Werte von option sind diejenigen, die für die oben beschriebene vollständige-Integration gültig sind. Die Option -D gibt an, dass andere bereitgestellte Optionen für die „Standard“-Befehlsvervollständigung gelten sollen; Das heißt, es wurde versucht, einen Befehl abzuschließen, für den zuvor kein Abschluss definiert wurde. Die Option -E gibt an, dass andere bereitgestellte Optionen für die „leere“ Befehlsvervollständigung gelten sollen; das heißt, der Abschluss wurde in einer leeren Zeile versucht. Die Option -I gibt an, dass andere bereitgestellte Optionen für die Vervollständigung des ersten Nichtzuweisungsworts in der Zeile oder nach einem Befehlstrennzeichen wie ; oder gelten sollen |, was normalerweise die Vervollständigung des Befehlsnamens ist.

Der Rückgabewert ist wahr, es sei denn, eine ungültige Option wird angegeben, es wird versucht, die Optionen für einen Namen zu ändern, für den keine Vervollständigungsspezifikation vorhanden ist, oder es tritt ein Ausgabefehler auf.

continue [n]

Setzen Sie die nächste Iteration der umschließenden for-, while-, until- oder select-Schleife fort. Wenn n angegeben ist, wird bei der nten umschließenden Schleife fortgefahren. n muss ≥ 1 sein. Wenn n größer als die Anzahl der umschließenden Schleifen ist, wird die letzte umschließende Schleife (die „oberste“ Schleife) fortgesetzt. Der Rückgabewert ist 0, es sei denn, n ist nicht größer oder gleich 1.

declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
typeset [-aAfFgiIlnrtux] [-p] [name[=value] ...]

Deklarieren Sie Variablen und/oder geben Sie ihnen Attribute. Wenn keine Namen angegeben sind, werden die Werte der Variablen angezeigt. Die Option -p zeigt die Attribute und Werte jedes Namens an. Wenn -p mit name-Argumenten verwendet wird, werden zusätzliche Optionen außer -f und -F ignoriert . Wenn -p ohne name-Argumente angegeben wird, werden die Attribute und Werte aller Variablen angezeigt, die über die durch die zusätzlichen Optionen angegebenen Attribute verfügen. Wenn mit -p keine anderen Optionen angegeben werden, zeigt declare die Attribute und Werte aller Shell-Variablen an. Die Option -f beschränkt die Anzeige auf Shell-Funktionen. Die Option -F verhindert die Anzeige von Funktionsdefinitionen; Es werden nur der Funktionsname und die Attribute gedruckt. Wenn die Shell-Option extdebug mit shopt aktiviert ist, werden auch der Name der Quelldatei und die Zeilennummer angezeigt, in der jeder name definiert ist. Die Option -F impliziert -f. Die Option -g erzwingt, dass Variablen im globalen Bereich erstellt oder geändert werden, selbst wenn declare in einer Shell-Funktion ausgeführt wird. In allen anderen Fällen wird es ignoriert. Die Option -I bewirkt, dass lokale Variablen die Attribute (mit Ausnahme des Attributs nameref) und den Wert jeder vorhandenen Variablen mit demselben Namen erben umgebenden Umfang. Wenn keine Variable vorhanden ist, ist die lokale Variable zunächst nicht gesetzt. Mit den folgenden Optionen kann die Ausgabe auf Variablen mit dem angegebenen Attribut beschränkt oder Variablen mit Attributen versehen werden:

-a

Jeder Name ist eine indizierte Array-Variable (siehe Arrays oben).

-A

Jeder Name ist eine assoziative Array-Variable (siehe Arrays oben).

-f

Verwenden Sie nur Funktionsnamen.

-i

Die Variable wird als Ganzzahl behandelt; Die arithmetische Auswertung (siehe ARITHMETISCHE AUSWERTUNG oben) wird durchgeführt, wenn der Variablen ein Wert zugewiesen wird.

-l

Wenn der Variablen ein Wert zugewiesen wird, werden alle Großbuchstaben in Kleinbuchstaben umgewandelt. Das Großbuchstaben-Attribut ist deaktiviert.

-n

Geben Sie jedem Name das Attribut nameref und machen Sie ihn so zu einem Namensverweis auf eine andere Variable. Diese andere Variable wird durch den Wert von name definiert. Alle Verweise, Zuweisungen und Attributänderungen an name, mit Ausnahme derjenigen, die das Attribut -n selbst verwenden oder ändern, werden an der Variablen durchgeführt, auf die durch name verwiesen wird >'s Wert. Das nameref-Attribut kann nicht auf Array-Variablen angewendet werden.

-r

Machen Sie Namen schreibgeschützt. Diesen Namen können dann keine Werte durch nachfolgende Zuweisungsanweisungen zugewiesen oder zurückgesetzt werden.

-t

Geben Sie jedem Namen das Attribut trace. Verfolgte Funktionen erben die DEBUG- und RETURN-Traps von der aufrufenden Shell. Das Trace-Attribut hat für Variablen keine besondere Bedeutung.

-u

Wenn der Variablen ein Wert zugewiesen wird, werden alle Kleinbuchstaben in Großbuchstaben umgewandelt. Das Kleinbuchstaben-Attribut ist deaktiviert.

-x

Markieren Sie Namens für den Export in nachfolgende Befehle über die Umgebung.

Durch die Verwendung von „+“ anstelle von „-“ wird das Attribut stattdessen deaktiviert, mit der Ausnahme, dass +a und +A nicht zum Zerstören von Array-Variablen und verwendet werden dürfen +r entfernt das schreibgeschützte Attribut nicht. Bei Verwendung in einer Funktion machen declare und typeset jeden Namen lokal, wie beim Befehl local, es sei denn, der Die Option -g wird bereitgestellt. Wenn auf einen Variablennamen =value folgt, wird der Wert der Variablen auf value gesetzt. Wenn Sie -a oder -A und die zusammengesetzte Zuweisungssyntax zum Erstellen von Array-Variablen verwenden, werden zusätzliche Attribute erst bei nachfolgenden Zuweisungen wirksam. Der Rückgabewert ist 0, es sei denn, es wird eine ungültige Option gefunden, es wird versucht, eine Funktion mit „-f foo=bar“ zu definieren, es wird versucht, einer schreibgeschützten Variablen einen Wert zuzuweisen, es wird versucht, eine Zuweisung vorzunehmen Wenn Sie einen Wert in eine Array-Variable eingeben, ohne die zusammengesetzte Zuweisungssyntax zu verwenden (siehe Arrays oben), einer der Namen kein gültiger Shell-Variablenname ist, wird versucht, ihn umzuwandeln Wenn Sie den schreibgeschützten Status für eine schreibgeschützte Variable deaktivieren, wird versucht, den Array-Status für eine Array-Variable zu deaktivieren, oder es wird versucht, eine nicht vorhandene Funktion mit -f anzuzeigen.

dirs [-clpv] [+n] [-n]

Ohne Optionen wird die Liste der aktuell gespeicherten Verzeichnisse angezeigt. Die Standardanzeige erfolgt in einer einzelnen Zeile mit durch Leerzeichen getrennten Verzeichnisnamen. Verzeichnisse werden mit dem Befehl pushd zur Liste hinzugefügt; Der Befehl popd entfernt Einträge aus der Liste. Das aktuelle Verzeichnis ist immer das erste Verzeichnis im Stapel.

-c

Löscht den Verzeichnisstapel, indem alle Einträge gelöscht werden.

-l

Erstellt eine Liste mit vollständigen Pfadnamen; Das Standardlistenformat verwendet eine Tilde, um das Home-Verzeichnis zu kennzeichnen.

-p

Drucken Sie den Verzeichnisstapel mit einem Eintrag pro Zeile.

-v

Drucken Sie den Verzeichnisstapel mit einem Eintrag pro Zeile und stellen Sie jedem Eintrag seinen Index im Stapel voran.

+n

Zeigt den nten Eintrag von links in der von dirs angezeigten Liste an, wenn er ohne Optionen aufgerufen wird, beginnend mit Null.

-n

Zeigt den nten Eintrag von rechts beginnend in der von dirs angezeigten Liste an, wenn er ohne Optionen aufgerufen wird, beginnend mit Null.

Der Rückgabewert ist 0, es sei denn, es wird eine ungültige Option angegeben oder n Indizes gehen über das Ende des Verzeichnisstapels hinaus.

disown [-ar] [-h] [jobspec ... | pid ... ]

Ohne Optionen wird jede Jobspec aus der Tabelle der aktiven Jobs entfernt. Wenn jobspec nicht vorhanden ist und weder die Option -a noch die Option -r angegeben wird, wird der aktuelle Job verwendet wird eingesetzt. Wenn die Option -h angegeben ist, wird jede jobspec nicht aus der Tabelle entfernt, sondern so markiert, dass SIGHUP nicht an den Job gesendet wird wenn die Shell ein SIGHUP empfängt. Wenn keine jobspec angegeben wird, bedeutet die Option -a, dass alle Jobs entfernt oder markiert werden; Die Option -r ohne ein jobspec-Argument beschränkt den Vorgang auf laufende Jobs. Der Rückgabewert ist 0, es sei denn, eine jobspec gibt keinen gültigen Job an.

echo [-neE] [arg ...]

Geben Sie die args aus, getrennt durch Leerzeichen, gefolgt von einer neuen Zeile. Der Rückgabestatus ist 0, sofern kein Schreibfehler auftritt. Wenn -n angegeben ist, wird der abschließende Zeilenumbruch unterdrückt. Wenn die Option -e angegeben ist, ist die Interpretation der folgenden Backslash-Escape-Zeichen aktiviert. Die Option -E deaktiviert die Interpretation dieser Escape-Zeichen, selbst auf Systemen, auf denen sie standardmäßig interpretiert werden. Die Shell-Option xpg_echo kann verwendet werden, um dynamisch zu bestimmen, ob echo diese Escape-Zeichen standardmäßig erweitert oder nicht. echo interpretiert -- nicht als Ende der Optionen. echo interpretiert die folgenden Escape-Sequenzen:

\a

Alarm (Glocke)

\b

Rücktaste

\c

weitere Ausgabe unterdrücken

\e
\E

ein Escape-Zeichen

\f

Formularvorschub

\n

Neue Zeile

\r

Wagenrücklauf

\t

horizontale Registerkarte

\v

vertikale Registerkarte

\\

Backslash

\0nnn

das Acht-Bit-Zeichen, dessen Wert der Oktalwert nnn ist (null bis drei Oktalziffern)

\xHH

das Acht-Bit-Zeichen, dessen Wert der Hexadezimalwert HH ist (eine oder zwei Hexadezimalziffern)

\uHHHH

das Unicode-Zeichen (ISO/IEC 10646), dessen Wert der Hexadezimalwert HHHH ist (ein bis vier Hexadezimalziffern)

\UHHHHHHHH

das Unicode-Zeichen (ISO/IEC 10646), dessen Wert der Hexadezimalwert HHHHHHHH ist (eine bis acht Hexadezimalziffern)

enable [-a] [-dnps] [-f filename] [name ...]

Aktivieren und deaktivieren Sie integrierte Shell-Befehle. Das Deaktivieren eines integrierten Befehls ermöglicht die Ausführung eines Festplattenbefehls, der denselben Namen wie ein Shell-integrierter Befehl hat, ohne Angabe eines vollständigen Pfadnamens, obwohl die Shell normalerweise vor Festplattenbefehlen nach integrierten Funktionen sucht. Wenn -n verwendet wird, wird jeder Name deaktiviert; andernfalls sind Namen aktiviert. Um beispielsweise die über PATH gefundene test-Binärdatei anstelle der in der Shell integrierten Version zu verwenden, führen Sie „enable -n test“ aus. Die Option -f bedeutet, den neuen integrierten Befehl name aus dem gemeinsam genutzten Objekt Dateiname auf Systemen zu laden, die dynamisches Laden unterstützen. Die Option -d löscht ein zuvor mit -f geladenes Builtin. Wenn keine name-Argumente angegeben werden oder wenn die Option -p angegeben wird, wird eine Liste der Shell-Builtins ausgegeben. Ohne weitere Optionsargumente besteht die Liste aus allen aktivierten Shell-Builtins. Wenn -n angegeben wird, werden nur deaktivierte integrierte Funktionen gedruckt. Wenn -a angegeben wird, enthält die gedruckte Liste alle integrierten Funktionen mit einem Hinweis darauf, ob jede einzelne aktiviert ist oder nicht. Wenn -s angegeben wird, ist die Ausgabe auf die POSIX-speziellen-Builtins beschränkt. Der Rückgabewert ist 0, es sei denn, ein name ist kein Shell-Built-In oder es liegt ein Fehler beim Laden eines neuen Built-Ins aus einem gemeinsam genutzten Objekt vor.

eval [arg ...]

Die args werden gelesen und zu einem einzigen Befehl verkettet. Dieser Befehl wird dann von der Shell gelesen und ausgeführt und sein Exit-Status wird als Wert von eval zurückgegeben. Wenn keine args oder nur Nullargumente vorhanden sind, gibt eval 0 zurück.

exec [-cl] [-a name] [command [arguments]]

Wenn command angegeben ist, ersetzt es die Shell. Es wird kein neuer Prozess erstellt. Die Argumente werden zu den Argumenten für Befehl. Wenn die Option -l angegeben wird, fügt die Shell einen Bindestrich am Anfang des nullten Arguments ein, das an command übergeben wird. Dies ist, was login(1) tut. Die Option -c bewirkt, dass der Befehl mit einer leeren Umgebung ausgeführt wird. Wenn -a angegeben wird, übergibt die Shell name als nulltes Argument an den ausgeführten Befehl. Wenn Befehl aus irgendeinem Grund nicht ausgeführt werden kann, wird eine nicht interaktive Shell beendet, es sei denn, die Shell-Option execfail ist aktiviert. In diesem Fall wird ein Fehler zurückgegeben. Eine interaktive Shell gibt einen Fehler zurück, wenn die Datei nicht ausgeführt werden kann. Eine Subshell wird bedingungslos beendet, wenn exec fehlschlägt. Wenn command nicht angegeben ist, werden alle Umleitungen in der aktuellen Shell wirksam und der Rückgabestatus ist 0. Wenn ein Umleitungsfehler vorliegt, ist der Rückgabestatus 1.

exit [n]

Bewirkt, dass die Shell mit dem Status n beendet wird. Wenn n weggelassen wird, ist der Exit-Status der des zuletzt ausgeführten Befehls. Ein Trap bei EXIT wird ausgeführt, bevor die Shell beendet wird.

export [-fn ] [name[=word]] ...
export -p

Die bereitgestellten Namen sind für den automatischen Export in die Umgebung nachfolgend ausgeführter Befehle markiert. Wenn die Option -f angegeben ist, beziehen sich die Namen auf Funktionen. Wenn keine Namen angegeben werden oder wenn die Option -p angegeben wird, wird eine Liste der Namen aller exportierten Variablen gedruckt. Die Option -n bewirkt, dass die Exporteigenschaft von jedem Namen entfernt wird. Wenn auf einen Variablennamen =word folgt, wird der Wert der Variablen auf word gesetzt. export gibt einen Exit-Status von 0 zurück, es sei denn, es wird eine ungültige Option gefunden, einer der Namen ist kein gültiger Shell-Variablenname oder -f wird mit einem Namen geliefert, der keine Funktion ist.

fc [-e ename] [-lnr] [first] [last]
fc -s [pat=rep] [cmd]

Das erste Formular wählt eine Reihe von Befehlen vom ersten bis zum letzten aus der Verlaufsliste aus und zeigt sie an oder bearbeitet sie und führt sie erneut aus. First und last können als Zeichenfolge (um den letzten Befehl zu finden, der mit dieser Zeichenfolge beginnt) oder als Zahl (ein Index in der Verlaufsliste, wobei es sich um eine negative Zahl handelt) angegeben werden wird als Offset zur aktuellen Befehlsnummer verwendet). Bei der Auflistung entspricht ein erster oder letzter von 0 -1 und -0 entspricht dem aktuellen Befehl (normalerweise dem fc-Befehl). ; andernfalls entspricht 0 -1 und -0 ist ungültig. Wenn last nicht angegeben ist, wird es auf den aktuellen Befehl zur Auflistung (so dass „fc -l -10“ die letzten 10 Befehle ausgibt) und auf first gesetzt ansonsten. Wenn first nicht angegeben ist, wird es zum Bearbeiten auf den vorherigen Befehl und zum Auflisten auf -16 gesetzt.

Die Option -n unterdrückt die Befehlsnummern beim Auflisten. Die Option -r kehrt die Reihenfolge der Befehle um. Wenn die Option -l angegeben ist, werden die Befehle in der Standardausgabe aufgelistet. Andernfalls wird der durch ename angegebene Editor für eine Datei aufgerufen, die diese Befehle enthält. Wenn ename nicht angegeben ist, wird der Wert der Variablen FCEDIT verwendet, bei FCEDIT der Wert von EDITOR ist nicht eingestellt. Wenn keine der Variablen festgelegt ist, wird  vi  verwendet. Wenn die Bearbeitung abgeschlossen ist, werden die bearbeiteten Befehle wiedergegeben und ausgeführt.

In der zweiten Form wird command erneut ausgeführt, nachdem jede Instanz von pat durch rep ersetzt wurde. Befehl wird genauso interpretiert wie erster oben. Ein nützlicher Alias dafür ist „r="fc -s"“, sodass bei Eingabe von „r cc“ der letzte Befehl ausgeführt wird, der mit „cc“ beginnt, und bei Eingabe von „r“ erneut ausgeführt wird der letzte Befehl.

Wenn die erste Form verwendet wird, ist der Rückgabewert 0, es sei denn, es wird eine ungültige Option gefunden oder first oder last geben Verlaufszeilen außerhalb des gültigen Bereichs an. Wenn die Option -e angegeben wird, ist der Rückgabewert der Wert des zuletzt ausgeführten Befehls oder ein Fehler, wenn in der temporären Befehlsdatei ein Fehler auftritt. Wenn die zweite Form verwendet wird, ist der Rückgabestatus der des erneut ausgeführten Befehls, es sei denn, cmd gibt keine gültige Verlaufszeile an. In diesem Fall gibt fc einen Fehler zurück.

fg [jobspec]

Setzen Sie jobspec im Vordergrund fort und machen Sie es zum aktuellen Job. Wenn jobspec nicht vorhanden ist, wird die Shell-Vorstellung des aktuellen Jobs verwendet. Der Rückgabewert ist der des im Vordergrund platzierten Befehls oder schlägt fehl, wenn die Ausführung bei deaktivierter Jobsteuerung erfolgt oder bei Ausführung mit aktivierter Jobsteuerung, wenn jobspec keinen gültigen Job oder angibt jobspec gibt einen Job an, der ohne Jobkontrolle gestartet wurde.

getopts optstring name [arg ...]

getopts wird von Shell-Prozeduren zum Parsen von Positionsparametern verwendet. optstring enthält die zu erkennenden Optionszeichen; Wenn auf ein Zeichen ein Doppelpunkt folgt, wird erwartet, dass die Option ein Argument hat, das durch Leerzeichen von ihr getrennt werden sollte. Die Zeichen Doppelpunkt und Fragezeichen dürfen nicht als Optionszeichen verwendet werden. Bei jedem Aufruf platziert getopts die nächste Option in der Shell-Variablen name und initialisiert name, falls sie nicht existiert, sowie den Index von das nächste Argument, das in die Variable OPTIND verarbeitet werden soll.

OPTIND wird jedes Mal auf 1 initialisiert, wenn die Shell oder ein Shell-Skript aufgerufen wird. Wenn eine Option ein Argument erfordert, fügt getopts dieses Argument in die Variable ein

OPTARG. Die Shell setzt OPTIND nicht automatisch zurück; Es muss zwischen mehreren Aufrufen von getopts innerhalb desselben Shell-Aufrufs manuell zurückgesetzt werden, wenn ein neuer Parametersatz verwendet werden soll.

Wenn das Ende der Optionen erreicht wird, wird getopts mit einem Rückgabewert größer als Null beendet.

OPTIND wird auf den Index des ersten Nicht-Optionsarguments gesetzt und name wird auf ? gesetzt.

getopts analysiert normalerweise die Positionsparameter, aber wenn mehr Argumente als arg-Werte angegeben werden, analysiert getopts diese stattdessen.

getopts kann Fehler auf zwei Arten melden. Wenn das erste Zeichen von optstring ein Doppelpunkt ist, wird eine stille Fehlerberichterstattung verwendet. Im Normalbetrieb werden Diagnosemeldungen ausgegeben, wenn ungültige Optionen oder fehlende Optionsargumente festgestellt werden. Wenn die Variable OPTERR auf 0 gesetzt ist, werden keine Fehlermeldungen angezeigt, auch wenn das erste Zeichen von optstring kein Doppelpunkt ist.

Wenn eine ungültige Option angezeigt wird, wird getopts platziert? in name und gibt, wenn nicht still, eine Fehlermeldung aus und deaktiviert OPTARG. Wenn getopts still ist, wird das gefundene Optionszeichen in OPTARG platziert und es wird keine Diagnosemeldung ausgegeben.

Wenn ein erforderliches Argument nicht gefunden wird und getopts nicht stumm ist, wird ein Fragezeichen ( ? ) in name, OPTARG, eingefügt ist deaktiviert und eine Diagnosemeldung wird gedruckt. Wenn getopts stumm ist, wird ein Doppelpunkt ( : ) in name eingefügt und OPTARG auf die Option gesetzt Charakter gefunden.

getopts gibt true zurück, wenn eine angegebene oder nicht angegebene Option gefunden wird. Es gibt „false“ zurück, wenn das Ende der Optionen erreicht wird oder ein Fehler auftritt.

hash [-lr] [-p filename] [-dt] [name]

Bei jedem Aufruf von hash wird der vollständige Pfadname des Befehls name durch Durchsuchen der Verzeichnisse in ` PATH ermittelt und gespeichert. Alle zuvor gespeicherten Pfadnamen werden verworfen. Wenn die Option -p angegeben wird, wird keine Pfadsuche durchgeführt und Dateiname wird als vollständiger Dateiname des Befehls verwendet. Die Option -r bewirkt, dass die Shell alle gespeicherten Speicherorte vergisst. Die Option -d bewirkt, dass die Shell den gespeicherten Speicherort jedes Namens vergisst. Wenn die Option -t angegeben wird, wird der vollständige Pfadname ausgegeben, dem jeder name entspricht. Wenn mit -t mehrere name-Argumente angegeben werden, wird der name vor dem gehashten vollständigen Pfadnamen gedruckt. Die Option -l bewirkt, dass die Ausgabe in einem Format angezeigt wird, das als Eingabe wiederverwendet werden kann. Wenn keine Argumente angegeben werden oder nur -l angegeben wird, werden Informationen über gespeicherte Befehle ausgegeben. Der Rückgabestatus ist wahr, es sei denn, es wurde kein Name gefunden oder eine ungültige Option angegeben.

help [-dms] [pattern]

Zeigen Sie hilfreiche Informationen zu integrierten Befehlen an. Wenn pattern angegeben ist, bietet help detaillierte Hilfe zu allen Befehlen, die mit pattern übereinstimmen. andernfalls wird Hilfe für alle Builtins und Shell-Kontrollstrukturen ausgegeben.

-d

Zeigt eine kurze Beschreibung jedes Musters an

-m

Zeigen Sie die Beschreibung jedes Musters in einem Manpage-ähnlichen Format an

-s

Für jedes Muster nur eine kurze Nutzungszusammenfassung anzeigen

Der Rückgabestatus ist 0, es sei denn, kein Befehl entspricht Muster.

history [n]
history -c
history -d offset
history -d start-end
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]

Ohne Optionen wird die Befehlsverlaufsliste mit Zeilennummern angezeigt. Mit einem * aufgeführte Zeilen wurden geändert. Ein Argument von n listet nur die letzten n Zeilen auf. Wenn die Shell-Variable HISTTIMEFORMAT gesetzt und nicht null ist, wird sie als Formatzeichenfolge für strftime(3) verwendet, um den zugehörigen Zeitstempel anzuzeigen mit jedem angezeigten Verlaufseintrag. Zwischen dem formatierten Zeitstempel und der Verlaufszeile wird kein Leerzeichen gedruckt. Wenn Dateiname angegeben wird, wird er als Name der Verlaufsdatei verwendet; andernfalls wird der Wert von HISTFILE verwendet. Optionen haben, sofern angegeben, die folgende Bedeutung:

-c

Löschen Sie die Verlaufsliste, indem Sie alle Einträge löschen.

-d offset

Löschen Sie den Verlaufseintrag an der Position Offset. Wenn Offset negativ ist, wird es als relativ zu eins größer interpretiert die letzte Position im Verlauf, daher zählen negative Indizes ab dem Ende des Verlaufs zurück, und ein Index von -1 bezieht sich auf den aktuellen history -d-Befehl.

-d start-end

Löschen Sie die Verlaufseinträge zwischen den Positionen Start und Ende, einschließlich. Positive und negative Werte für start und end werden wie oben beschrieben interpretiert.

-a

Hängen Sie die „neuen“ Verlaufszeilen an die Verlaufsdatei an. Dabei handelt es sich um Verlaufszeilen, die seit Beginn der aktuellen Bash-Sitzung eingegeben, aber noch nicht an die Verlaufsdatei angehängt wurden.

-n

Liest die noch nicht gelesenen Verlaufszeilen aus der Verlaufsdatei in die aktuelle Verlaufsliste ein. Dies sind Zeilen, die seit Beginn der aktuellen Bash-Sitzung an die Verlaufsdatei angehängt wurden

-r

Lesen Sie den Inhalt der Verlaufsdatei und hängen Sie ihn an die aktuelle Verlaufsliste an.

-w

Schreiben Sie die aktuelle Verlaufsliste in die Verlaufsdatei und überschreiben Sie dabei den Inhalt der Verlaufsdatei.

-p

Führen Sie eine Verlaufsersetzung für die folgenden Argumente durch und zeigen Sie das Ergebnis in der Standardausgabe an. Speichert die Ergebnisse nicht in der Verlaufsliste. Jedes arg muss in Anführungszeichen gesetzt werden, um die normale Verlaufserweiterung zu deaktivieren.

-s

Speichern Sie die args in der Verlaufsliste als einzelnen Eintrag. Der letzte Befehl in der Verlaufsliste wird entfernt, bevor die args hinzugefügt werden.

Wenn die Variable HISTTIMEFORMAT gesetzt ist, werden die mit jedem Verlaufseintrag verknüpften Zeitstempelinformationen in die Verlaufsdatei geschrieben und mit dem Verlaufskommentarzeichen markiert. Beim Lesen der Verlaufsdatei werden Zeilen, die mit dem Verlaufskommentarzeichen beginnen und unmittelbar von einer Ziffer gefolgt werden, als Zeitstempel für den folgenden Verlaufseintrag interpretiert. Der Rückgabewert ist 0, es sei denn, es wird eine ungültige Option gefunden, beim Lesen oder Schreiben der Verlaufsdatei tritt ein Fehler auf, ein ungültiger Offset wird als Argument für -d angegeben oder der Die als Argument für -p bereitgestellte Verlaufserweiterung schlägt fehl.

jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]

Das erste Formular listet die aktiven Jobs auf. Die Optionen haben folgende Bedeutung:

-l

Listen Sie Prozess-IDs zusätzlich zu den normalen Informationen auf.

-n

Zeigt nur Informationen zu Jobs an, deren Status sich seit der letzten Benachrichtigung des Benutzers über ihren Status geändert hat.

-p

Listen Sie nur die Prozess-ID des Prozessgruppenleiters des Jobs auf.

-r

Nur laufende Jobs anzeigen.

-s

Nur gestoppte Jobs anzeigen.

Wenn jobspec angegeben ist, ist die Ausgabe auf Informationen zu diesem Job beschränkt. Der Rückgabestatus ist 0, es sei denn, es wird eine ungültige Option gefunden oder eine ungültige jobspec angegeben.

Wenn die Option -x angegeben wird, ersetzt jobs alle jobspec, die in command oder args gefunden werden. mit der entsprechenden Prozessgruppen-ID und führt den Befehl aus, wobei er args übergibt und seinen Exit-Status zurückgibt.

kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l|-L [sigspec | exit_status]

Senden Sie das durch sigspec oder signum benannte Signal an die durch pid oder jobspec benannten Prozesse. sigspec ist entweder ein Signalname, bei dem die Groß-/Kleinschreibung nicht beachtet wird, wie z. B. SIGKILL (mit oder ohne das SIG-Präfix) oder eine Signalnummer; signum ist eine Signalnummer. Wenn sigspec nicht vorhanden ist, wird SIGTERM angenommen. Ein Argument von -l listet die Signalnamen auf. Wenn bei der Angabe von -l Argumente angegeben werden, werden die Namen der den Argumenten entsprechenden Signale aufgelistet und der Rückgabestatus ist 0. Das Argument exit_status to -l ist eine Zahl, die entweder eine Signalnummer oder den Exit-Status eines durch ein Signal beendeten Prozesses angibt. Die Option -L entspricht -l. kill gibt true zurück, wenn mindestens ein Signal erfolgreich gesendet wurde, oder false, wenn ein Fehler auftritt oder Es wurde eine ungültige Option gefunden.

let arg [arg ...]

Jedes arg ist ein auszuwertender arithmetischer Ausdruck (siehe ARITHMETISCHE AUSWERTUNG oben). Wenn das letzte arg 0 ergibt, gibt let 1 zurück; Andernfalls wird 0 zurückgegeben.

local [option] [name[=value] ... | - ]

Für jedes Argument wird eine lokale Variable mit dem Namen name erstellt und ihr wird ein Wert zugewiesen. Bei der Option kann es sich um eine beliebige von „declare“ akzeptierte Option handeln. Wenn local innerhalb einer Funktion verwendet wird, verursacht es die Variable name um einen sichtbaren Bereich zu haben, der auf diese Funktion und ihre untergeordneten Elemente beschränkt ist. Wenn name - ist, wird der Satz von Shell-Optionen lokal für die Funktion erstellt, in der local aufgerufen wird: Shell-Optionen werden mit in der Funktion integrierte Werte werden auf ihre ursprünglichen Werte zurückgesetzt, wenn die Funktion zurückkehrt. Die Wiederherstellung erfolgt so, als ob eine Reihe von Set-Befehlen ausgeführt würden, um die Werte wiederherzustellen, die vor der Funktion vorhanden waren. Ohne Operanden schreibt local eine Liste lokaler Variablen in die Standardausgabe. Es ist ein Fehler, local zu verwenden, wenn es sich nicht innerhalb einer Funktion befindet. Der Rückgabestatus ist 0, es sei denn, local wird außerhalb einer Funktion verwendet, ein ungültiger name angegeben oder name ist eine schreibgeschützte Variable.

logout

Beenden Sie eine Login-Shell.

mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]

Liest Zeilen aus der Standardeingabe in die indizierte Array-Variable array oder aus dem Dateideskriptor fd, wenn die Option -u angegeben ist. Die Variable MAPFILE ist das Standard-Array. Optionen haben, sofern angegeben, die folgende Bedeutung:

-d

Das erste Zeichen von delim wird zum Beenden jeder Eingabezeile verwendet, und nicht für eine neue Zeile. Wenn delim die leere Zeichenfolge ist, beendet Mapfile eine Zeile, wenn es ein NUL-Zeichen liest.

-n

Kopieren Sie höchstens Anzahl Zeilen. Wenn count 0 ist, werden alle Zeilen kopiert.

-O

Beginnen Sie mit der Zuweisung zum Array am Index origin. Der Standardindex ist 0.

-s

Verwerfen Sie die ersten count gelesenen Zeilen.

-t

Entfernen Sie ein nachgestelltes delim (Standard-Neuzeile) aus jeder gelesenen Zeile.

-u

Liest Zeilen aus dem Dateideskriptor fd anstelle der Standardeingabe.

-C

Werten Sie callback jedes Mal aus, wenn quantum-Zeilen gelesen werden. Die Option -c gibt Quantum an.

-c

Geben Sie die Anzahl der Zeilen an, die zwischen jedem Aufruf von callback gelesen werden.

Wenn -C ohne -c angegeben wird, beträgt das Standardquantum 5000. Wenn callback ausgewertet wird, wird ihm der Index von bereitgestellt das nächste zuzuweisende Array-Element und die Zeile, die diesem Element zugewiesen werden soll, als zusätzliche Argumente. callback wird ausgewertet, nachdem die Zeile gelesen wurde, aber bevor das Array-Element zugewiesen wird.

Wenn kein expliziter Ursprung angegeben wird, löscht mapfiledas Array, bevor es ihm zugewiesen wird.

mapfile wird erfolgreich zurückgegeben, es sei denn, eine ungültige Option oder ein ungültiges Optionsargument wird angegeben, array ist ungültig oder nicht zuweisbar oder wenn array ist kein indiziertes Array.

popd [-n] [+n] [-n]

Entfernt Einträge aus dem Verzeichnisstapel. Entfernt ohne Argumente das oberste Verzeichnis vom Stapel und führt eine cd zum neuen obersten Verzeichnis durch. Argumente haben, sofern angegeben, die folgende Bedeutung:

-n

Unterdrückt den normalen Verzeichniswechsel beim Entfernen von Verzeichnissen vom Stapel, sodass nur der Stapel manipuliert wird.

+n

Entfernt den nten Eintrag von links aus der von dirs angezeigten Liste, beginnend mit Null. Beispiel: „popd +0“ entfernt das erste Verzeichnis, „popd +1“ das zweite.

-n

Entfernt den nten Eintrag von rechts aus der von dirs angezeigten Liste, beginnend mit Null. Beispiel: „popd -0“ entfernt das letzte Verzeichnis, „popd -1“ das vorletzte.

Wenn der Befehl popd erfolgreich ist, wird auch ein dirs ausgeführt und der Rückgabestatus ist 0. popd gibt false zurück, wenn eine ungültige Option vorliegt Wenn ein Fehler auftritt, ist der Verzeichnisstapel leer, es wurde ein nicht vorhandener Verzeichnisstapeleintrag angegeben oder der Verzeichniswechsel schlägt fehl.

printf [-v var] format [arguments]

Schreiben Sie die formatierten Argumente unter der Steuerung des Formats in die Standardausgabe. Die Option -v bewirkt, dass die Ausgabe der Variablen var zugewiesen wird und nicht auf der Standardausgabe ausgegeben wird.

Das Format ist eine Zeichenfolge, die drei Arten von Objekten enthält: einfache Zeichen, die einfach in die Standardausgabe kopiert werden, Zeichen-Escape-Sequenzen, die konvertiert und in den Standard kopiert werden Ausgabe- und Formatspezifikationen, die jeweils das Drucken des nächsten nachfolgenden argument bewirken. Zusätzlich zum Standard printf(1) Formatspezifikationen printf interpretiert die folgenden Erweiterungen:

%b

bewirkt, dass printf Backslash-Escape-Sequenzen im entsprechenden Argument auf die gleiche Weise erweitert wie echo -e.

%q

bewirkt, dass printf das entsprechende Argument in einem Format ausgibt, das als Shell-Eingabe wiederverwendet werden kann.

%(datefmt)T

bewirkt, dass printf die Datums-/Uhrzeitzeichenfolge ausgibt, die sich aus der Verwendung datefmt als Formatzeichenfolge für strftime ergibt (3). Das entsprechende Argument ist eine Ganzzahl, die die Anzahl Sekunden seit der Epoche darstellt. Es können zwei spezielle Argumentwerte verwendet werden: -1 stellt die aktuelle Zeit dar und -2 stellt die Zeit dar, zu der die Shell aufgerufen wurde. Wenn kein Argument angegeben wird, verhält sich die Konvertierung so, als ob -1 angegeben worden wäre. Dies ist eine Ausnahme vom üblichen printf-Verhalten

Die Anweisungen %b, %q und %T verwenden alle die Feldbreiten- und Präzisionsargumente aus der Formatspezifikation und schreiben so viele Bytes aus dem erweiterten Argument (oder verwenden ein so breites Feld dafür), das normalerweise mehr Zeichen als das Original enthält .

Argumente für Nicht-String-Formatbezeichner werden als C-Konstanten behandelt, mit der Ausnahme, dass ein führendes Plus- oder Minuszeichen zulässig ist und wenn das führende Zeichen ein einfaches oder doppeltes Anführungszeichen ist, ist der Wert der ASCII-Wert des folgenden Zeichens.

Das Format wird nach Bedarf wiederverwendet, um alle Argumente zu verwenden. Wenn das Format erfordert mehr Argumente als bereitgestellt werden, verhalten sich die zusätzlichen Formatangaben so, als ob ein Nullwert bzw. eine Nullzeichenfolge angegeben worden wäre. Der Rückgabewert ist bei Erfolg Null und bei Fehler ungleich Null.

pushd [-n] [+n] [-n]
pushd [-n] [dir]

Fügt ein Verzeichnis an der Spitze des Verzeichnisstapels hinzu oder dreht den Stapel, sodass die neue Spitze des Stapels zum aktuellen Arbeitsverzeichnis wird. Ohne Argumente tauscht pushd die beiden obersten Verzeichnisse aus und gibt 0 zurück, es sei denn, der Verzeichnisstapel ist leer. Argumente haben, sofern angegeben, die folgende Bedeutung:

-n

Unterdrückt den normalen Verzeichniswechsel beim Rotieren oder Hinzufügen von Verzeichnissen zum Stapel, sodass nur der Stapel manipuliert wird.

+n

Dreht den Stapel so, dass das nte Verzeichnis (von links in der durch dirs angezeigten Liste gezählt, beginnend mit Null) oben liegt .

-n

Dreht den Stapel so, dass das nte Verzeichnis (von rechts in der durch dirs angezeigten Liste gezählt, beginnend bei Null) oben liegt .

dir

Fügt dir oben zum Verzeichnisstapel hinzu und macht es zum neuen aktuellen Arbeitsverzeichnis, als ob es als Argument für die cd-Built-Instanz angegeben worden wäre

Wenn der pushd-Befehl erfolgreich ist, wird auch ein dirs ausgeführt. Wenn die erste Form verwendet wird, gibt pushd 0 zurück, es sei denn, die cd nach dir schlägt fehl. Bei der zweiten Form gibt pushd 0 zurück, es sei denn, der Verzeichnisstapel ist leer, ein nicht vorhandenes Verzeichnisstapelelement wird angegeben oder der Verzeichniswechsel in das angegebene neue aktuelle Verzeichnis schlägt fehl.

pwd [-LP]

Gibt den absoluten Pfadnamen des aktuellen Arbeitsverzeichnisses aus. Der gedruckte Pfadname enthält keine symbolischen Links, wenn die Option -P angegeben oder die Option -o physisch für den integrierten Befehl set aktiviert ist. Wenn die Option -L verwendet wird, kann der ausgegebene Pfadname symbolische Links enthalten. Der Rückgabestatus ist 0, es sei denn, beim Lesen des Namens des aktuellen Verzeichnisses tritt ein Fehler auf oder es wird eine ungültige Option angegeben.

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

Eine Zeile wird aus der Standardeingabe oder aus dem Dateideskriptor fd gelesen, der als Argument für die Option -u bereitgestellt wird, und in Wörter aufgeteilt, wie oben unter Wort beschrieben Aufteilen und das erste Wort wird dem ersten Namen zugeordnet, das zweite Wort dem zweiten Namen und so weiter. Wenn mehr Wörter als Namen vorhanden sind, werden die verbleibenden Wörter und ihre dazwischen liegenden Trennzeichen dem letzten Namen zugewiesen. Wenn aus dem Eingabestream weniger Wörter als Namen gelesen werden, werden den verbleibenden Namen leere Werte zugewiesen. Die Zeichen in IFS werden verwendet, um die Zeile nach denselben Regeln in Wörter aufzuteilen, die die Shell für die Erweiterung verwendet (siehe oben unter Wortaufteilung). Das Backslash-Zeichen ( \) kann verwendet werden, um jede spezielle Bedeutung für das nächste gelesene Zeichen und für die Zeilenfortsetzung zu entfernen. Optionen haben, sofern angegeben, die folgende Bedeutung:

-a aname

Die Wörter werden aufeinanderfolgenden Indizes der Array-Variablen aname zugewiesen, beginnend bei 0. aname wird zurückgesetzt, bevor neue Werte zugewiesen werden. Andere name-Argumente werden ignoriert.

-d delim

Das erste Zeichen von delim wird zum Beenden der Eingabezeile verwendet und nicht für den Zeilenumbruch. Wenn delim die leere Zeichenfolge ist, beendet read eine Zeile, wenn ein NUL-Zeichen gelesen wird.

-e

Wenn die Standardeingabe von einem Terminal kommt, wird readline (siehe READLINE oben) verwendet, um die Zeile abzurufen. Readline verwendet die aktuellen Bearbeitungseinstellungen (oder die Standardeinstellung, wenn die Zeilenbearbeitung zuvor nicht aktiv war), verwendet jedoch die standardmäßige Dateinamenvervollständigung von Readline.

-i text

Wenn readline zum Lesen der Zeile verwendet wird, wird Text in den Bearbeitungspuffer gestellt, bevor die Bearbeitung beginnt.

-n nchars

read kehrt zurück, nachdem nchars Zeichen gelesen wurden, anstatt auf eine vollständige Eingabezeile zu warten, berücksichtigt aber ein Trennzeichen, wenn weniger als nchars Zeichen werden vor dem Trennzeichen gelesen.

-N nchars

read kehrt zurück, nachdem genau nchars Zeichen gelesen wurden, anstatt auf eine vollständige Eingabezeile zu warten, es sei denn, EOF wird angetroffen oder read läuft ab. Trennzeichen, die in der Eingabe vorkommen, werden nicht speziell behandelt und führen nicht dazu, dass read zurückgegeben wird, bis nchars Zeichen gelesen wurden. Das Ergebnis wird in IFS nicht auf die Zeichen aufgeteilt; Die Absicht besteht darin, dass der Variablen genau die gelesenen Zeichen zugewiesen werden (mit Ausnahme des Backslashs; siehe die Option -r unten).

-p prompt

Zeigt eine Eingabeaufforderung bei der Standardfehlerausgabe ohne einen nachgestellten Zeilenumbruch an, bevor versucht wird, eine Eingabe zu lesen. Die Eingabeaufforderung wird nur angezeigt, wenn die Eingabe von einem Terminal erfolgt.

-r

Backslash fungiert nicht als Escape-Zeichen. Der Backslash wird als Teil der Zeile betrachtet. Insbesondere darf ein Backslash-Newline-Paar dann nicht als Zeilenfortsetzung verwendet werden.

-s

Stiller Modus. Wenn die Eingabe von einem Terminal erfolgt, werden Zeichen nicht wiedergegeben.

-t timeout

Führt dazu, dass beim Lesen eine Zeitüberschreitung auftritt und ein Fehler zurückgegeben wird, wenn eine vollständige Eingabezeile (oder eine angegebene Anzahl von Zeichen) nicht innerhalb von Zeitüberschreitung Sekunden gelesen wird. timeout kann eine Dezimalzahl mit einem Bruchteil nach dem Dezimalpunkt sein. Diese Option ist nur wirksam, wenn read die Eingabe von einem Terminal, einer Pipe oder einer anderen speziellen Datei liest; Beim Lesen aus regulären Dateien hat dies keine Auswirkung. Wenn bei read eine Zeitüberschreitung auftritt, speichert read alle gelesenen Teileingaben in der angegebenen Variablen name. Bei timeout ist 0, read kehrt sofort zurück, ohne zu versuchen, irgendwelche Daten zu lesen. Der Exit-Status ist 0, wenn die Eingabe für den angegebenen Dateideskriptor verfügbar ist, andernfalls ist er ungleich Null. Der Exit-Status ist größer als 128, wenn das Timeout überschritten wird.

-u fd

Liest die Eingabe aus dem Dateideskriptor fd.

Wenn keine Namen angegeben werden, wird die gelesene Zeile ohne das Endtrennzeichen, aber ansonsten unverändert, der Variablen REPLY zugewiesen. Der Exit-Status ist Null, es sei denn, es liegt ein Dateiende vor, es kommt zu einer Zeitüberschreitung beim Lesen (in diesem Fall ist der Status größer als 128), es liegt ein Variablenzuweisungsfehler vor (z. B. bei der Zuweisung zu einer schreibgeschützten Variablen). auftritt oder ein ungültiger Dateideskriptor als Argument für -u. angegeben wird

readonly [-aAf] [-p] [name[=word] ...]

Die angegebenen Namen sind als schreibgeschützt markiert; Die Werte dieser Namen dürfen durch nachträgliche Zuweisung nicht verändert werden. Wenn die Option -f angegeben wird, werden die den Namen entsprechenden Funktionen entsprechend markiert. Die Option -a beschränkt die Variablen auf indizierte Arrays; Die Option -A beschränkt die Variablen auf assoziative Arrays. Wenn beide Optionen angegeben werden, hat -A Vorrang. Wenn keine name-Argumente angegeben werden oder wenn die Option -p angegeben wird, wird eine Liste aller schreibgeschützten Namen gedruckt. Die anderen Optionen können verwendet werden, um die Ausgabe auf eine Teilmenge der schreibgeschützten Namen zu beschränken. Die Option -p bewirkt, dass die Ausgabe in einem Format angezeigt wird, das als Eingabe wiederverwendet werden kann. Wenn auf einen Variablennamen =word folgt, wird der Wert der Variablen auf word gesetzt. Die Rückgabe Status ist 0, es sei denn, es wird eine ungültige Option gefunden, einer der Namen ist kein gültiger Shell-Variablenname oder -f wird mit einem Namen angegeben das ist keine Funktion.

return [n]

Bewirkt, dass eine Funktion die Ausführung stoppt und den durch n angegebenen Wert an ihren Aufrufer zurückgibt. Wenn n weggelassen wird, ist der Rückgabestatus der des letzten im Funktionskörper ausgeführten Befehls. Wenn return von einem Trap-Handler ausgeführt wird, ist der letzte Befehl, der zur Bestimmung des Status verwendet wird, der letzte Befehl, der vor dem Trap-Handler ausgeführt wurde. Wenn return während eines DEBUG-Traps ausgeführt wird, ist der letzte Befehl, der zur Bestimmung des Status verwendet wird, der letzte Befehl, der vom Trap-Handler ausgeführt wurde, bevor return aufgerufen wurde. Wenn return wird außerhalb einer Funktion verwendet, aber während der Ausführung eines Skripts durch den Befehl . (source) führt es dazu, dass die Shell die Ausführung dieses Skripts stoppt und entweder zurückgibt n oder der Exit-Status des letzten im Skript ausgeführten Befehls als Exit-Status des Skripts. Wenn n angegeben wird, besteht der Rückgabewert aus den niedrigstwertigen 8 Bits. Der Rückgabestatus ist ungleich Null, wenn return ein nicht numerisches Argument übergeben wird oder außerhalb einer Funktion und nicht während der Ausführung eines Skripts durch verwendet wird. oder Quelle. Jeder mit der RETURN-Trap verknüpfte Befehl wird ausgeführt, bevor die Ausführung nach der Funktion oder dem Skript fortgesetzt wird.

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]

Ohne Optionen werden der Name und der Wert jeder Shell-Variablen in einem Format angezeigt, das als Eingabe zum Festlegen oder Zurücksetzen der aktuell eingestellten Variablen wiederverwendet werden kann. Schreibgeschützte Variablen können nicht zurückgesetzt werden. Im Posix-Modus werden nur Shell-Variablen aufgelistet. Die Ausgabe wird nach dem aktuellen Gebietsschema sortiert. Wenn Optionen angegeben werden, werden Shell-Attribute festgelegt oder deaktiviert. Alle nach der Optionsverarbeitung verbleibenden Argumente werden als Werte für die Positionsparameter behandelt und der Reihe nach $1, $2, ... zugewiesen $n. Optionen haben, sofern angegeben, die folgende Bedeutung:

-a

Jede Variable oder Funktion, die erstellt oder geändert wird, erhält das Exportattribut und wird für den Export in die Umgebung nachfolgender Befehle markiert.

-b

Melden Sie den Status beendeter Hintergrundjobs sofort und nicht vor der nächsten primären Eingabeaufforderung. Dies ist nur wirksam, wenn die Jobkontrolle aktiviert ist.

-e

Beenden Sie sofort, wenn eine Pipeline (die aus einem einzelnen einfachen Befehl bestehen kann), eine Liste oder ein zusammengesetzter Befehl (siehe SHELL-GRAMMAR oben) wird mit einem Status ungleich Null beendet. Die Shell wird nicht beendet, wenn der fehlgeschlagene Befehl Teil der Befehlsliste ist, die unmittelbar auf ein while- oder until-Schlüsselwort folgt, Teil des Tests, der auf if folgt.- oder elif-reservierte Wörter, Teil eines Befehls, der in einer &&- oder ||-Liste ausgeführt wird, mit Ausnahme des Befehls, der auf das letzte && folgt oder ||, jeder Befehl in einer Pipeline außer dem letzten, oder wenn der Rückgabewert des Befehls mit ! invertiert wird. Wenn ein zusammengesetzter Befehl, bei dem es sich nicht um eine Subshell handelt, einen Status ungleich Null zurückgibt, weil ein Befehl fehlgeschlagen ist, während -e ignoriert wurde, wird die Shell nicht beendet. Eine Falle für ERR, falls gesetzt, ist wird ausgeführt, bevor die Shell beendet wird. Diese Option gilt für die Shell-Umgebung und jede Subshell-Umgebung separat (siehe

COMMAND EXECUTION ENVIRONMENT oben) und kann dazu führen, dass Subshells beendet werden, bevor alle Befehle in der Subshell ausgeführt werden.

Wenn ein zusammengesetzter Befehl oder eine Shell-Funktion in einem Kontext ausgeführt wird, in dem -e ignoriert wird, ist keiner der im zusammengesetzten Befehl oder Funktionskörper ausgeführten Befehle von der Einstellung -e betroffen wenn -e gesetzt ist und ein Befehl einen Fehlerstatus zurückgibt. Wenn ein zusammengesetzter Befehl oder eine Shell-Funktion -e während der Ausführung in einem Kontext setzt, in dem -e ignoriert wird, hat diese Einstellung keine Wirkung, bis der zusammengesetzte Befehl oder der enthaltende Befehl ausgeführt wird Der Funktionsaufruf wird abgeschlossen.

-f

Deaktivieren Sie die Pfadnamenerweiterung.

-h

Merken Sie sich den Speicherort der Befehle, wenn diese zur Ausführung gesucht werden. Dies ist standardmäßig aktiviert.

-k

Alle Argumente in Form von Zuweisungsanweisungen werden in der Umgebung für einen Befehl platziert, nicht nur diejenigen, die dem Befehlsnamen vorangehen.

-m

Überwachungsmodus. Die Jobsteuerung ist aktiviert. Diese Option ist standardmäßig für interaktive Shells auf Systemen aktiviert, die sie unterstützen (siehe JOB CONTROL oben). Alle Prozesse laufen in einer separaten Prozessgruppe. Wenn ein Hintergrundauftrag abgeschlossen ist, gibt die Shell eine Zeile mit dem Beendigungsstatus aus.

-n

Befehle lesen, aber nicht ausführen. Dies kann verwendet werden, um ein Shell-Skript auf Syntaxfehler zu überprüfen. Dies wird von interaktiven Shells ignoriert.

-o option-name

Der Optionsname kann einer der folgenden sein:

allexport

Identisch mit -a.

braceexpand

Identisch mit -B.

emacs

Verwenden Sie eine Befehlszeilen-Bearbeitungsoberfläche im Emacs-Stil. Dies ist standardmäßig aktiviert, wenn die Shell interaktiv ist, es sei denn, die Shell wird mit der Option --noediting gestartet. Dies betrifft auch die Bearbeitungsoberfläche, die für read -e. verwendet wird

errexit

Identisch mit -e.

errtrace

Identisch mit -E.

functrace

Identisch mit -T.

hashall

Identisch mit -h.

histexpand

Identisch mit -H.

history

Aktivieren Sie den Befehlsverlauf, wie oben unter VERLAUF beschrieben. Diese Option ist in interaktiven Shells standardmäßig aktiviert.

ignoreeof

Der Effekt ist, als ob der Shell-Befehl „IGNOREEOF=10“ ausgeführt worden wäre (siehe Shell-Variablen oben).

keyword

Identisch mit -k.

monitor

Identisch mit -m.

noclobber

Identisch mit -C.

noexec

Identisch mit -n.

noglob

Identisch mit -f.

nolog

Wird derzeit ignoriert.

notify

Identisch mit -b.

nounset

Identisch mit -u.

onecmd

Identisch mit -t.

physical

Identisch mit -P.

pipefail

Wenn festgelegt, ist der Rückgabewert einer Pipeline der Wert des letzten Befehls (ganz rechts), der mit einem Status ungleich Null beendet wird, oder Null, wenn alle Befehle in der Pipeline erfolgreich beendet werden. Diese Option ist standardmäßig deaktiviert.

posix

Ändern Sie das Verhalten von bash, wenn die Standardoperation vom POSIX-Standard abweicht, um sie an den Standard anzupassen (Posix-Modus). Siehe SIEHE AUCH unten finden Sie einen Verweis auf ein Dokument, das detailliert beschreibt, wie sich der Posix-Modus auf das Verhalten von Bash auswirkt.

privileged

Identisch mit -p.

verbose

Identisch mit -v.

vi

Verwenden Sie eine Befehlszeilen-Bearbeitungsoberfläche im VI-Stil. Dies betrifft auch die Bearbeitungsoberfläche, die für read -e. verwendet wird

xtrace

Identisch mit -x.

Wenn -o ohne Optionsname angegeben wird, werden die Werte der aktuellen Optionen ausgegeben. Wenn +o ohne option-name angegeben wird, wird eine Reihe von set-Befehlen zum Wiederherstellen der aktuellen Optionseinstellungen ausgeführt wird auf der Standardausgabe angezeigt.

-p

Aktivieren Sie den privilegierten Modus. In diesem Modus werden die Dateien $ENV und $BASH_ENV nicht verarbeitet, Shell-Funktionen werden nicht von der Umgebung geerbt und die SHELLOPTS, < Die VariablenBASHOPTS, CDPATH und GLOBIGNORE werden ignoriert, wenn sie in der Umgebung vorkommen. Wenn die Shell mit einer effektiven Benutzer-(Gruppen-)ID gestartet wird, die nicht mit der tatsächlichen Benutzer-(Gruppen-)ID übereinstimmt, und die Option -p nicht angegeben ist, werden diese Aktionen ausgeführt und die effektive Benutzer-ID ist gleich auf die echte Benutzer-ID gesetzt. Wenn die Option -p beim Start angegeben wird, wird die effektive Benutzer-ID nicht zurückgesetzt. Wenn Sie diese Option deaktivieren, werden die effektiven Benutzer- und Gruppen-IDs auf die tatsächlichen Benutzer- und Gruppen-IDs gesetzt.

-t

Beenden Sie den Vorgang, nachdem Sie einen Befehl gelesen und ausgeführt haben.

-u

Behandeln Sie nicht gesetzte Variablen und Parameter außer den Sonderparametern „@“ und „*“ als Fehler, wenn Sie eine Parametererweiterung durchführen. Wenn eine Erweiterung für eine nicht gesetzte Variable oder einen nicht gesetzten Parameter versucht wird, gibt die Shell eine Fehlermeldung aus und wird, wenn sie nicht interaktiv ist, mit einem Status ungleich Null beendet.

-v

Gibt Shell-Eingabezeilen aus, während sie gelesen werden.

-x

Nachdem Sie jeden einfachen Befehl, für Befehl, Groß-/Kleinschreibungsbefehl, Auswahlbefehl oder Arithmetik für Befehl erweitert haben, wird der erweiterte Wert von< angezeigt PS4, gefolgt vom Befehl und seinen erweiterten Argumenten oder der zugehörigen Wortliste.

-B

Die Shell führt eine Klammererweiterung durch (siehe Klammererweiterung oben). Dies ist standardmäßig aktiviert.

-C

Wenn festgelegt, überschreibt bash keine vorhandene Datei mit den Umleitungsoperatoren >, >& und <> . Dies kann beim Erstellen von Ausgabedateien überschrieben werden, indem der Umleitungsoperator >| anstelle von > verwendet wird.

-E

Wenn festgelegt, wird jede Falle für ERR von Shell-Funktionen, Befehlsersetzungen und Befehlen übernommen, die in einer Subshell-Umgebung ausgeführt werden. Der ERR-Trap wird in solchen Fällen normalerweise nicht vererbt.

-H

Aktivieren Sie die Verlaufsersetzung im !-Stil. Diese Option ist standardmäßig aktiviert, wenn die Shell interaktiv ist.

-P

Wenn festgelegt, löst die Shell symbolische Links nicht auf, wenn Befehle wie cd ausgeführt werden, die das aktuelle Arbeitsverzeichnis ändern. Stattdessen wird die physische Verzeichnisstruktur verwendet. Standardmäßig folgt bash der logischen Verzeichniskette, wenn Befehle ausgeführt werden, die das aktuelle Verzeichnis ändern.

-T

Wenn festgelegt, werden alle Traps bei DEBUG und RETURN von Shell-Funktionen, Befehlsersetzungen und Befehlen, die in einer Subshell-Umgebung ausgeführt werden, geerbt. Die DEBUG- und RETURN-Traps werden in solchen Fällen normalerweise nicht vererbt.

--

Wenn dieser Option keine Argumente folgen, werden die Positionsparameter nicht gesetzt. Andernfalls werden die Positionsparameter auf die args gesetzt, auch wenn einige davon mit einem - beginnen.

-

Signalisieren Sie das Ende der Optionen und veranlassen Sie, dass alle verbleibenden Argumenteden Positionsparametern zugewiesen werden. Die Optionen -x und -v sind deaktiviert. Wenn keine args vorhanden sind, bleiben die Positionsparameter unverändert.

Sofern nicht anders angegeben, sind die Optionen standardmäßig deaktiviert. Wenn Sie „+“ anstelle von „-“ verwenden, werden diese Optionen deaktiviert. Die Optionen können auch als Argumente für einen Aufruf der Shell angegeben werden. Die aktuellen Optionen finden Sie in $-. Der Rückgabestatus ist immer wahr, es sei denn, es wird eine ungültige Option gefunden.

shift [n]

Die Positionsparameter von n+1 ... werden in $1 .... umbenannt. Parameter, die durch dargestellt werden Zahlen $# bis hinunter zu $#-n+1 sind nicht gesetzt. n muss eine nicht negative Zahl kleiner oder gleich $# sein. Wenn n 0 ist, werden keine Parameter geändert. Wenn n nicht angegeben ist, wird angenommen, dass es 1 ist. Wenn n größer als $# ist, werden die Positionsparameter nicht geändert. Die Rückgabestatus ist größer als Null, wenn n größer als $# oder kleiner als Null ist; sonst 0.

shopt [-pqsu] [-o] [optname ...]

Schalten Sie die Werte der Einstellungen um, die das optionale Shell-Verhalten steuern. Die Einstellungen können entweder die unten aufgeführten sein oder, wenn die Option -o verwendet wird, diejenigen sein, die mit der Option -o für den Befehl setbuiltin< verfügbar sind Ohne Optionen oder mit der Option -p wird eine Liste aller einstellbaren Optionen angezeigt, mit einem Hinweis darauf, ob jede Option festgelegt ist oder nicht; Wenn optnames angegeben werden, ist die Ausgabe auf diese Optionen beschränkt. Die Option -p bewirkt, dass die Ausgabe in einer Form angezeigt wird, die wiederverwendet werden kann als Eingabe. Andere Optionen haben folgende Bedeutung:

-s

Aktivieren (setzen) Sie jeden optnamen.

-u

Deaktivieren (nicht festgelegt) Sie jeden optnamen.

-q

Unterdrückt die normale Ausgabe (Ruhemodus); Der Rückgabestatus gibt an, ob der optname gesetzt oder nicht gesetzt ist. Wenn mehrere optname-Argumente mit angegeben werden -q, der Rückgabestatus ist Null, wenn alle optnames aktiviert sind; andernfalls ungleich Null.

-o

Beschränkt die Werte von optname auf die Werte, die für die Option -o im integrierten set definiert sind.

Wenn entweder -s oder -u ohne optname-Argumente verwendet wird, shopt zeigt nur die Optionen an, die jeweils gesetzt bzw. nicht gesetzt sind. Sofern nicht anders angegeben, sind die Shopt-Optionen standardmäßig deaktiviert (nicht festgelegt).

Der Rückgabestatus beim Auflisten von Optionen ist Null, wenn alle optnames aktiviert sind, andernfalls ungleich Null. Beim Festlegen oder Deaktivieren von Optionen ist der Rückgabestatus Null, es sei denn, ein optname ist keine gültige Shell-Option.

Die Liste der Shopt-Optionen ist:

assoc_expand_once

Wenn diese Option festgelegt ist, unterdrückt die Shell die Mehrfachauswertung assoziativer Array-Indizes während der Auswertung arithmetischer Ausdrücke, während Build-Ins ausgeführt werden, die Variablenzuweisungen durchführen können, und während Build-Ins ausgeführt werden, die eine Array-Dereferenzierung durchführen.

autocd

Wenn festgelegt, wird ein Befehlsname, der der Name eines Verzeichnisses ist, so ausgeführt, als wäre er das Argument für den cd-Befehl. Diese Option wird nur von interaktiven Shells verwendet.

cdable_vars

Wenn festgelegt, wird davon ausgegangen, dass ein Argument des integrierten Befehls cd, das kein Verzeichnis ist, der Name einer Variablen ist, deren Wert das Verzeichnis ist, in das gewechselt werden soll.

cdspell

Wenn festgelegt, werden kleinere Fehler in der Schreibweise einer Verzeichniskomponente in einem cd-Befehl korrigiert. Die geprüften Fehler sind vertauschte Zeichen, ein fehlendes Zeichen und ein Zeichen zu viel. Wenn eine Korrektur gefunden wird, wird der korrigierte Dateiname ausgegeben und der Befehl wird fortgesetzt. Diese Option wird nur von interaktiven Shells verwendet.

checkhash

Wenn festgelegt, prüft bash, ob ein in der Hashtabelle gefundener Befehl vorhanden ist, bevor versucht wird, ihn auszuführen. Wenn ein gehashter Befehl nicht mehr existiert, wird eine normale Pfadsuche durchgeführt.

checkjobs

Wenn festgelegt, bash listet den Status aller gestoppten und laufenden Jobs auf, bevor eine interaktive Shell beendet wird. Wenn Jobs ausgeführt werden, wird das Beenden verzögert, bis ein zweiter Exit-Versuch ohne dazwischenliegenden Befehl versucht wird (siehe JOB-STEUERUNG oben). Die Shell verschiebt das Beenden immer, wenn Jobs gestoppt werden.

checkwinsize

Wenn festgelegt, überprüft bash die Fenstergröße nach jedem externen (nicht integrierten) Befehl und aktualisiert bei Bedarf die Werte von LINES und COLUMNS . Diese Option ist standardmäßig aktiviert.

cmdhist

Wenn festgelegt, versucht bash, alle Zeilen eines mehrzeiligen Befehls im selben Verlaufseintrag zu speichern. Dies ermöglicht ein einfaches Nachbearbeiten mehrzeiliger Befehle. Diese Option ist standardmäßig aktiviert, hat jedoch nur dann eine Auswirkung, wenn der Befehlsverlauf aktiviert ist, wie oben unter VERLAUF beschrieben.

compat31
compat32
compat40
compat41
compat42
compat43
compat44

Diese steuern Aspekte des Kompatibilitätsmodus der Shell (siehe SHELL-KOMPATIBILITÄTSMODUS unten).

complete_fullquote

Wenn festgelegt, setzt bash bei der Vervollständigung alle Shell-Metazeichen in Dateinamen und Verzeichnisnamen in Anführungszeichen. Wenn nicht festgelegt, entfernt bash Metazeichen wie das Dollarzeichen aus dem Zeichensatz, der in vervollständigten Dateinamen in Anführungszeichen gesetzt wird, wenn diese Metazeichen in Shell-Variablenreferenzen in zu vervollständigenden Wörtern erscheinen. Das bedeutet, dass Dollarzeichen in Variablennamen, die auf Verzeichnisse erweitert werden, nicht in Anführungszeichen gesetzt werden; Allerdings werden auch in Dateinamen vorkommende Dollarzeichen nicht in Anführungszeichen gesetzt. Dies ist nur aktiv, wenn Bash Backslashes verwendet, um vollständige Dateinamen in Anführungszeichen zu setzen. Diese Variable ist standardmäßig festgelegt, was in den Versionen bis 4.2 dem Standard-Bash-Verhalten entspricht.

direxpand

Wenn festgelegt, ersetzt bash Verzeichnisnamen durch die Ergebnisse der Worterweiterung, wenn die Dateinamenvervollständigung durchgeführt wird. Dadurch wird der Inhalt des Readline-Bearbeitungspuffers geändert. Wenn nicht festgelegt, versucht bash, die Eingaben des Benutzers beizubehalten.

dirspell

Wenn festgelegt, versucht bash während der Wortvervollständigung eine Rechtschreibkorrektur für Verzeichnisnamen, wenn der ursprünglich angegebene Verzeichnisname nicht existiert.

dotglob

Wenn festgelegt, schließt bash Dateinamen ein, die mit einem „.“ beginnen. in den Ergebnissen der Pfadnamenerweiterung. Die Dateinamen ``.'' und ``..'' müssen immer explizit abgeglichen werden, auch wenn dotglob gesetzt ist.

execfail

Wenn festgelegt, wird eine nicht interaktive Shell nicht beendet, wenn sie die als Argument für den integrierten Befehl exec angegebene Datei nicht ausführen kann. Eine interaktive Shell wird nicht beendet, wenn exec fehlschlägt.

expand_aliases

Wenn festgelegt, werden Aliase wie oben unter ALIASES beschrieben erweitert. Diese Option ist für interaktive Shells standardmäßig aktiviert.

extdebug

Wenn beim Shell-Aufruf oder in einer Shell-Startdatei festgelegt, veranlassen Sie die Ausführung des Debugger-Profils vor dem Start der Shell, identisch mit der Option --debugger. Wenn nach dem Aufruf festgelegt, Verhalten, das von Debuggern verwendet werden soll aktiviert:

1.

Die Option -F für die integrierte Deklaration zeigt den Quelldateinamen und die Zeilennummer an, die jedem als Argument angegebenen Funktionsnamen entsprechen.

2.

Wenn der von der DEBUG-Trap ausgeführte Befehl einen Wert ungleich Null zurückgibt, wird der nächste Befehl übersprungen und nicht ausgeführt.

3.

Wenn der von der DEBUG-Trap ausgeführte Befehl den Wert 2 zurückgibt und die-Shell in einer Unterroutine (einer Shell-Funktion oder einem Shell-Skript, das von . oder Quell-Builtins ausgeführt wird) ausgeführt wird, wird die Shell simuliert einen Aufruf von return.

4.

BASH_ARGC und BASH_ARGV werden wie in ihren Beschreibungen oben beschrieben aktualisiert.

5.

Die Funktionsverfolgung ist aktiviert: Befehlsersetzung, Shell-Funktionen und Subshells, die mit ( command ) aufgerufen werden, erben die DEBUG- und RETURN-Traps.<

6.

Die Fehlerverfolgung ist aktiviert: Befehlsersetzung, Shell-Funktionen und Subshells, die mit ( command ) aufgerufen werden, erben den ERR-Trap.

extglob

Wenn festgelegt, werden die oben unter Pfadnamenerweiterung beschriebenen erweiterten Mustervergleichsfunktionen aktiviert

extquote

Wenn festgelegt, werden Anführungszeichen für $'string' und $"string" ausgeführt innerhalb von $ {Parameter}-Erweiterungen, eingeschlossen in doppelte Anführungszeichen. Diese Option ist standardmäßig aktiviert.

failglob

Wenn diese Option festgelegt ist, führen Muster, die bei der Pfadnamenerweiterung nicht mit Dateinamen übereinstimmen, zu einem Erweiterungsfehler.

force_fignore

Wenn festgelegt, führen die durch die Shell-Variable FIGNORE angegebenen Suffixe dazu, dass Wörter bei der Wortvervollständigung ignoriert werden, selbst wenn die ignorierten Wörter die einzig möglichen Vervollständigungen sind. Eine Beschreibung von FIGNORE finden Sie oben unter SHELL-VARIABLEN. Diese Option ist standardmäßig aktiviert.

globasciiranges

Wenn festgelegt, verhalten sich Bereichsausdrücke, die in Mustervergleichs-Klammerausdrücken verwendet werden (siehe Mustervergleich oben), bei der Durchführung von Vergleichen wie im traditionellen C-Gebietsschema. Das heißt, die Sortierreihenfolge des aktuellen Gebietsschemas wird nicht berücksichtigt, sodass b nicht zwischen A und B sowie Großbuchstaben und sortiert ASCII-Kleinbuchstaben werden zusammengefügt.

globstar

Wenn festgelegt, stimmt das Muster **, das in einem Pfadnamenerweiterungskontext verwendet wird, mit allen Dateien und null oder mehr Verzeichnissen und Unterverzeichnissen überein. Wenn dem Muster ein / folgt, stimmen nur Verzeichnisse und Unterverzeichnisse überein.

gnu_errfmt

Wenn festgelegt, werden Shell-Fehlermeldungen im standardmäßigen GNU-Fehlermeldungsformat geschrieben.

histappend

Wenn festgelegt, wird die Verlaufsliste beim Beenden der Shell an die durch den Wert der Variablen HISTFILE benannte Datei angehängt, anstatt die Datei zu überschreiben.

histreedit

Wenn festgelegt und readline verwendet wird, erhält ein Benutzer die Möglichkeit, eine fehlgeschlagene Verlaufsersetzung erneut zu bearbeiten.

histverify

Wenn festgelegt und readline verwendet wird, werden die Ergebnisse der Verlaufsersetzung nicht sofort an den Shell-Parser übergeben. Stattdessen wird die resultierende Zeile in den Readline-Bearbeitungspuffer geladen, um weitere Änderungen zu ermöglichen.

hostcomplete

Wenn festgelegt und readline verwendet wird, versucht bash, die Vervollständigung des Hostnamens durchzuführen, wenn ein Wort vervollständigt wird, das ein @ enthält (siehe Ausfüllen unter READLINE oben). Dies ist standardmäßig aktiviert.

huponexit

Wenn festgelegt, sendet bash SIGHUP an alle Jobs, wenn eine interaktive Anmelde-Shell beendet wird.

inherit_errexit

Wenn diese Option festgelegt ist, erbt die Befehlsersetzung den Wert der Option errexit, anstatt sie in der Subshell-Umgebung zu deaktivieren. Diese Option ist aktiviert, wenn der Posix-Modus aktiviert ist.

interactive_comments

Wenn festgelegt, kann ein Wort, das mit # beginnt, dazu führen, dass dieses Wort und alle verbleibenden Zeichen in dieser Zeile in einer interaktiven Shell ignoriert werden (siehe KOMMENTARE oben). Diese Option ist standardmäßig aktiviert.

lastpipe

Wenn festgelegt und die Jobsteuerung nicht aktiv ist, führt die Shell den letzten Befehl einer Pipeline aus, die nicht im Hintergrund in der aktuellen Shell-Umgebung ausgeführt wird.

lithist

Wenn festgelegt und die Option cmdhist aktiviert ist, werden mehrzeilige Befehle nach Möglichkeit mit eingebetteten Zeilenumbrüchen im Verlauf gespeichert, anstatt Semikolon-Trennzeichen zu verwenden.

localvar_inherit

Wenn diese Option festgelegt ist, erben lokale Variablen den Wert und die Attribute einer Variablen mit demselben Namen, die in einem vorherigen Bereich vorhanden ist, bevor ein neuer Wert zugewiesen wird. Das nameref-Attribut wird nicht vererbt.

localvar_unset

Wenn sie gesetzt sind, werden sie durch den Aufruf von unset für lokale Variablen in vorherigen Funktionsbereichen markiert, sodass sie bei nachfolgenden Suchvorgängen als nicht gesetzt angezeigt werden, bis die Funktion zurückkehrt. Dies ist identisch mit dem Verhalten beim Deaktivieren lokaler Variablen im aktuellen Funktionsumfang.

login_shell

Die Shell setzt diese Option, wenn sie als Login-Shell gestartet wird (siehe INVOCATION oben). Der Wert darf nicht verändert werden.

mailwarn

Wenn dies festgelegt ist und seit der letzten Überprüfung auf eine Datei zugegriffen wurde, auf die bash nach E-Mails sucht, wird die Meldung „Die E-Mail in mailfile wurde angezeigt „read“ wird angezeigt.

no_empty_cmd_completion

Wenn dies festgelegt ist und readline verwendet wird, versucht bash nicht, den PATH nach möglichen Vervollständigungen zu durchsuchen, wenn die Vervollständigung in einer leeren Zeile versucht wird.

nocaseglob

Wenn festgelegt, gleicht bash Dateinamen bei der Pfadnamenerweiterung ohne Berücksichtigung der Groß- und Kleinschreibung ab (siehe Pfadnamenerweiterung oben).

nocasematch

Wenn diese Option festgelegt ist, gleicht bash Muster ohne Berücksichtigung der Groß-/Kleinschreibung ab, wenn der Abgleich beim Ausführen von Groß-/Kleinschreibung- oder [[-Bedingungsbefehlen durchgeführt wird, wenn Worterweiterungen durch Musterersetzung durchgeführt werden oder wenn mögliche Vervollständigungen gefiltert werden als Teil der programmierbaren Vervollständigung.

nullglob

Wenn festgelegt, ermöglicht bash, dass Muster, die mit keinen Dateien übereinstimmen (siehe Pfadnamenerweiterung oben), zu einer Nullzeichenfolge und nicht zu sich selbst erweitert werden.

progcomp

Wenn festgelegt, sind die programmierbaren Vervollständigungsfunktionen (siehe Programmierbare Vervollständigung oben) aktiviert. Diese Option ist standardmäßig aktiviert.

progcomp_alias

Wenn festgelegt und die programmierbare Vervollständigung aktiviert ist, behandelt bash einen Befehlsnamen, der keine Vervollständigungen aufweist, als möglichen Alias und versucht eine Alias-Erweiterung. Wenn es einen Alias hat, versucht bash eine programmierbare Vervollständigung mit dem Befehlswort, das sich aus dem erweiterten Alias ergibt.

promptvars

Wenn festgelegt, werden Eingabeaufforderungszeichenfolgen nach der Erweiterung einer Parametererweiterung, Befehlsersetzung, arithmetischen Erweiterung und Anführungszeichenentfernung unterzogen, wie oben unter PROMPTING beschrieben. Diese Option ist standardmäßig aktiviert.

restricted_shell

Die Shell setzt diese Option, wenn sie im eingeschränkten Modus gestartet wird (siehe EINGESCHRÄNKTE SHELL unten). Der Wert darf nicht verändert werden. Dies wird nicht zurückgesetzt, wenn die Startdateien ausgeführt werden, sodass die Startdateien erkennen können, ob eine Shell eingeschränkt ist oder nicht.

shift_verbose

Wenn festgelegt, gibt die integrierte Funktion shift eine Fehlermeldung aus, wenn die Anzahl der Verschiebungen die Anzahl der Positionsparameter überschreitet.

sourcepath

Wenn festgelegt, verwendet die integrierte source (.)-Funktion den Wert von PATH, um das Verzeichnis zu finden, das die als Argument angegebene Datei enthält. Diese Option ist standardmäßig aktiviert.

xpg_echo

Wenn festgelegt, erweitert das echo-Built-In standardmäßig Backslash-Escape-Sequenzen.

suspend [-f]

Unterbrechen Sie die Ausführung dieser Shell, bis sie ein SIGCONT-Signal empfängt. Eine Login-Shell kann nicht ausgesetzt werden; Mit der Option -f kann dies außer Kraft gesetzt und die Aussetzung erzwungen werden. Der Rückgabestatus ist 0, es sei denn, die Shell ist eine Login-Shell und -f wird nicht angegeben oder wenn die Jobsteuerung nicht aktiviert ist.

test expr
[ expr ]

Gibt einen Status von 0 (wahr) oder 1 (falsch) zurück, abhängig von der Auswertung des bedingten Ausdrucks expr. Jeder Operator und Operand muss ein separates Argument sein.

BEDINGTE AUSDRÜCKE. test akzeptiert keine Optionen, noch akzeptiert und ignoriert ein Argument von -- als Hinweis auf das Ende von Optionen.

Ausdrücke können mit den folgenden Operatoren kombiniert werden, die in absteigender Reihenfolge aufgeführt sind. Die Bewertung hängt von der Anzahl der Argumente ab; siehe unten. Die Operatorpriorität wird verwendet, wenn fünf oder mehr Argumente vorhanden sind.

! expr

Wahr, wenn expr falsch ist.

( expr )

Gibt den Wert von expr zurück. Dies kann verwendet werden, um die normale Priorität von Operatoren zu überschreiben.

expr1 -a expr2

Wahr, wenn sowohl expr1 als auch expr2 wahr sind.

expr1 -o expr2

Wahr, wenn entweder expr1 oder expr2 wahr ist.

Testen und bewerten Sie bedingte Ausdrücke mithilfe einer Reihe von Regeln, die auf der Anzahl der Argumente basieren.

0 arguments

Der Ausdruck ist falsch.

1 argument

Der Ausdruck ist genau dann wahr, wenn das Argument nicht null ist.

2 arguments

Wenn das erste Argument ! ist, ist der Ausdruck genau dann wahr, wenn das zweite Argument null ist. Wenn das erste Argument einer der oben unter BEDINGTE AUSDRÜCKE aufgeführten unären Bedingungsoperatoren ist, ist der Ausdruck wahr, wenn der unäre Test wahr ist. Wenn das erste Argument kein gültiger unärer Bedingungsoperator ist, ist der Ausdruck falsch.

3 arguments

Die folgenden Bedingungen gelten in der aufgeführten Reihenfolge. Wenn das zweite Argument einer der oben unter BEDINGTE AUSDRÜCKE aufgeführten binären bedingten Operatoren ist, ist das Ergebnis des Ausdrucks das Ergebnis des binären Tests, bei dem das erste und dritte Argument als Operanden verwendet werden. Die Operatoren -a und -o gelten als binäre Operatoren, wenn drei Argumente vorhanden sind. Wenn das erste Argument ! ist, ist der Wert die Negation des Tests mit zwei Argumenten unter Verwendung des zweiten und dritten Arguments. Wenn das erste Argument genau (und das dritte Argument genau ) ist, ist das Ergebnis der Ein-Argument-Test des zweiten Arguments. Andernfalls ist der Ausdruck falsch.

4 arguments

Wenn das erste Argument ! ist, ist das Ergebnis die Negation des aus den verbleibenden Argumenten zusammengesetzten Ausdrucks mit drei Argumenten. Andernfalls wird der Ausdruck anhand der oben aufgeführten Regeln analysiert und nach Priorität ausgewertet.

5 or more arguments

Der Ausdruck wird anhand der oben aufgeführten Regeln analysiert und nach Priorität ausgewertet.

Bei Verwendung mit test oder [, sortieren die Operatoren < und > lexikografisch mithilfe der ASCII-Reihenfolge.

times

Drucken Sie die kumulierten Benutzer- und Systemzeiten für die Shell und für von der Shell ausgeführte Prozesse aus. Der Rückgabestatus ist 0.

trap [-lp] [[arg] sigspec ...]

Der Befehl arg soll gelesen und ausgeführt werden, wenn die Shell Signale sigspec empfängt. Wenn arg fehlt (und es eine einzelne sigspec gibt) oder -, wird jedes angegebene Signal auf seinen Wert zurückgesetzt ursprüngliche Verfügung (der Wert, den es beim Eintritt in die Hülle hatte). Wenn arg die Nullzeichenfolge ist, wird das von jeder sigspec angegebene Signal von der Shell und den von ihr aufgerufenen Befehlen ignoriert. Wenn arg nicht vorhanden ist und -p angegeben wurde, werden die mit jeder sigspec verknüpften Trap-Befehle angezeigt. Wenn keine Argumente angegeben werden oder nur -p angegeben wird, gibt trap die Liste der mit jedem Signal verknüpften Befehle aus. Die Option -l veranlasst die Shell, eine Liste von Signalnamen und den entsprechenden Nummern auszugeben. Jede sigspec ist entweder ein in <signal.h> definierter Signalname oder eine Signalnummer. Bei Signalnamen wird die Groß-/Kleinschreibung nicht beachtet und die SIG ist optional.

Wenn eine sigspec EXIT (0) ist, wird der Befehl arg beim Verlassen der Shell ausgeführt. Wenn eine sigspec DEBUG ist, wird der Befehl arg vor jedem einfachen Befehl ausgeführt, for-Befehl, case-Befehl, select-Befehl, jede Arithmetik für-Befehl und bevor der erste Befehl in einer Shell-Funktion ausgeführt wird (siehe Shell-Grammatik oben). Einzelheiten zu deren Auswirkung auf die DEBUG-Trap finden Sie in der Beschreibung der extdebug-Option des shopt-Built-Ins. Wenn eine sigspec ist RETURN, der Befehl arg wird jedes Mal ausgeführt, wenn eine Shell-Funktion oder ein Skript mit ausgeführt wird. oder Quell-Builtins werden ausgeführt.

Wenn eine sigspec ERR ist, wird der Befehl arg immer dann ausgeführt, wenn eine Pipeline (die aus einem einzelnen einfachen Befehl bestehen kann), eine Liste oder Ein zusammengesetzter Befehl gibt einen Exit-Status ungleich Null zurück, vorbehaltlich der folgenden Bedingungen. Der ERR-Trap wird nicht ausgeführt, wenn der fehlgeschlagene Befehl Teil der Befehlsliste ist, die unmittelbar auf ein while- oder until-Schlüsselwort folgt, das Teil des Tests ist eine if-Anweisung, Teil eines Befehls, der in einer &&- oder ||-Liste ausgeführt wird, mit Ausnahme des Befehls, der auf das letzte && oder || folgt , jeder Befehl in einer Pipeline außer dem letzten, oder wenn der Rückgabewert des Befehls mit ! invertiert wird. Dies sind die gleichen Bedingungen, die auch die Option errexit (-e) erfüllt

Signale, die beim Eintritt in die Shell ignoriert werden, können nicht abgefangen oder zurückgesetzt werden. Eingefangene Signale, die nicht ignoriert werden, werden in einer Subshell oder Subshell-Umgebung auf ihre ursprünglichen Werte zurückgesetzt, wenn eine solche erstellt wird. Der Rückgabestatus ist „false“, wenn eine sigspec ungültig ist; andernfalls gibt trap true zurück.

type [-aftpP] name [name ...]

Ohne Optionen geben Sie an, wie jeder Name interpretiert würde, wenn er als Befehlsname verwendet würde. Wenn die Option -t verwendet wird, gibt type eine Zeichenfolge aus, die entweder alias, keyword oder ist >function, builtin oder file, wenn name ein Alias, ein Shell-reserviertes Wort, eine Funktion, ein Builtin oder eine Festplattendatei ist, bzw. Wenn der name nicht gefunden wird, wird nichts gedruckt und der Exit-Status „false“ zurückgegeben. Wenn die Option -p verwendet wird, gibt type entweder den Namen der Festplattendatei zurück, die ausgeführt würde, wenn name als Befehlsname angegeben würde , oder nichts, wenn „type -t name“ nicht file zurückgeben würde. Die Option -P erzwingt eine PATH-Suche für jeden Namen, auch wenn „type -t name“ verwendet wird. würde Datei nicht zurückgeben. Wenn ein Befehl gehasht ist, geben -p und -P den Hash-Wert aus, der nicht unbedingt die Datei ist, die zuerst in PATH erscheint. Wenn die Option -a verwendet wird, gibt type alle Stellen aus, die eine ausführbare Datei mit dem Namen name enthalten. Dies schließt Aliase und Funktionen ein, sofern nicht auch die Option -p verwendet wird. Die Tabelle der gehashten Befehle wird bei Verwendung von -a nicht herangezogen. Die Option -f unterdrückt die Shell-Funktionssuche, wie beim commandbuiltin. type gibt „true“ zurück, wenn alle Argumente gefunden werden, und „false“, falls vorhanden werden nicht gefunden.

ulimit [-HS] -a
ulimit [-HS] [-bcdefiklmnpqrstuvxPRT [limit]]

Bietet Kontrolle über die Ressourcen, die der Shell und den von ihr gestarteten Prozessen auf Systemen zur Verfügung stehen, die eine solche Kontrolle ermöglichen. Die Optionen -H und -S geben an, dass das harte oder weiche Limit für die angegebene Ressource festgelegt wird. Ein fester Grenzwert kann von einem Nicht-Root-Benutzer nicht erhöht werden, sobald er festgelegt ist; Ein Soft-Limit kann bis zum Wert des Hard-Limits erhöht werden. Wenn weder -H noch -S angegeben ist, werden sowohl die weichen als auch die harten Grenzwerte festgelegt. Der Wert von limit kann eine Zahl in der für die Ressource angegebenen Einheit oder einer der Sonderwerte hard, soft oder sein unlimited, die jeweils für das aktuelle Hard-Limit, das aktuelle Soft-Limit und kein Limit stehen. Wenn limit weggelassen wird, wird der aktuelle Wert des Soft-Limits der Ressource gedruckt, es sei denn, die Option -H ist angegeben. Wenn mehr als eine Ressource angegeben ist, werden der Grenzwertname und ggf. die Einheit vor dem Wert gedruckt. Andere Optionen werden wie folgt interpretiert:

-a

Alle aktuellen Grenzwerte werden gemeldet; Es sind keine Grenzen gesetzt

-b

Die maximale Socket-Puffergröße

-c

Die maximale Größe der erstellten Kerndateien

-d

Die maximale Größe des Datensegments eines Prozesses

-e

Die maximale Planungspriorität („nice“)

-f

Die maximale Größe der von der Shell und ihren untergeordneten Dateien geschriebenen Dateien

-i

Die maximale Anzahl anstehender Signale

-k

Die maximale Anzahl von kqueues, die zugewiesen werden können

-l

Die maximale Größe, die im Speicher gesperrt werden kann

-m

Die maximale residente Satzgröße (viele Systeme halten diese Grenze nicht ein)

-n

Die maximale Anzahl offener Dateideskriptoren (die meisten Systeme lassen die Festlegung dieses Werts nicht zu)

-p

Die Pipe-Größe in 512-Byte-Blöcken (dies kann möglicherweise nicht festgelegt werden)

-q

Die maximale Anzahl von Bytes in POSIX-Nachrichtenwarteschlangen

-r

Die maximale Echtzeit-Planungspriorität

-s

Die maximale Stapelgröße

-t

Die maximale CPU-Zeit in Sekunden

-u

Die maximale Anzahl von Prozessen, die einem einzelnen Benutzer zur Verfügung stehen

-v

Die maximale Menge an virtuellem Speicher, die der Shell und auf einigen Systemen ihren untergeordneten Systemen zur Verfügung steht

-x

Die maximale Anzahl von Dateisperren

-P

Die maximale Anzahl von Pseudoterminals

-R

Die maximale Zeit, die ein Echtzeitprozess laufen kann, bevor er blockiert wird, in Mikrosekunden

-T

Die maximale Anzahl von Threads

Wenn limit angegeben ist und die Option -a nicht verwendet wird, ist limit der neue Wert der angegebenen Ressource. Wenn keine Option angegeben ist, wird -f angenommen. Die Werte werden in 1024-Byte-Schritten angegeben, mit Ausnahme von -t, das in Sekunden angegeben wird. -R, Angabe in Mikrosekunden; -p, in Einheiten von 512-Byte-Blöcken; -P, -T, -b, -k, -n, und -u, bei denen es sich um unskalierte Werte handelt; und im Posix-Modus -c und -f, jeweils in 512-Byte-Schritten. Der Rückgabestatus ist 0, es sei denn, eine ungültige Option oder ein ungültiges Argument wird angegeben oder beim Festlegen eines neuen Grenzwerts tritt ein Fehler auf.

umask [-p] [-S] [mode]

Die Dateierstellungsmaske des Benutzers ist auf Modus eingestellt. Wenn mode mit einer Ziffer beginnt, wird diese als Oktalzahl interpretiert; andernfalls wird es als symbolische Modusmaske interpretiert, ähnlich der, die von chmod(1) akzeptiert wird. Wenn mode weggelassen wird, wird der aktuelle Wert der Maske gedruckt. Die Option -S bewirkt, dass die Maske in symbolischer Form gedruckt wird; Die Standardausgabe ist eine Oktalzahl. Wenn die Option -p angegeben und mode weggelassen wird, erfolgt die Ausgabe in einer Form, die als Eingabe wiederverwendet werden kann. Der Rückgabestatus ist 0, wenn der Modus erfolgreich geändert wurde oder wenn kein mode-Argument angegeben wurde, andernfalls false.

unalias [-a] [name ...]

Entfernen Sie jeden Namen aus der Liste der definierten Aliase. Wenn -a angegeben wird, werden alle Aliasdefinitionen entfernt. Der Rückgabewert ist wahr, es sei denn, ein angegebener name ist kein definierter Alias.

unset [-fv] [-n] [name ...]

Entfernen Sie für jeden Namen die entsprechende Variable oder Funktion. Wenn die Option -v angegeben ist, verweist jeder name auf eine Shell-Variable und diese Variable wird entfernt. Schreibgeschützte Variablen dürfen nicht deaktiviert werden. Wenn -f angegeben ist, verweist jeder name auf eine Shell-Funktion und die Funktionsdefinition wird entfernt. Wenn die Option -n angegeben wird und name eine Variable mit dem Attribut nameref ist, name wird nicht gesetzt und nicht die Variable, auf die es verweist. -n hat keine Auswirkung, wenn die Option -f angegeben wird.

Wenn keine Optionen angegeben werden, verweist jeder name auf eine Variable; Wenn es keine Variable mit diesem Namen gibt, wird eine Funktion mit diesem Namen, falls vorhanden, nicht gesetzt. Jede nicht gesetzte Variable oder Funktion wird aus der Umgebung entfernt und an nachfolgende Befehle übergeben. Wenn eines von BASH_ALIASES, BASH_ARGV0, BASH_CMDS, BASH_COMMAND, BASH_SUBSHELL, BASHPID, COMP_WORDBREAKS, DIRSTACK, EPOCHREALTIME, EPOCHSECONDS, FUNCNAME , GROUPS, HISTCMD, LINENO, RANDOM, SECONDS oder SRANDOM nicht gesetzt sind, verlieren sie ihre besonderen Eigenschaften, auch wenn sie später zurückgesetzt werden.

Der Exit-Status ist wahr, es sei denn, ein Name ist schreibgeschützt.

wait [-fn] [-p varname] [id ...]

Warten Sie auf jeden angegebenen untergeordneten Prozess und geben Sie seinen Beendigungsstatus zurück. Jede id kann eine Prozess-ID oder eine Jobspezifikation sein; Wenn eine Jobspezifikation angegeben ist, wird auf alle Prozesse in der Pipeline dieses Jobs gewartet. Wenn id nicht angegeben ist, wartet wait auf alle laufenden Hintergrundjobs und auf die Ersetzung des zuletzt ausgeführten Prozesses, wenn dessen Prozess-ID mit $!,< übereinstimmt und der Rückgabestatus ist Null. Wenn die Option -n angegeben ist, wartet auf einen einzelnen Job aus der Liste der ids oder, wenn nicht IDss bereitgestellt, um jeden Job abzuschließen und seinen Beendigungsstatus zurückzugeben. Wenn keines der bereitgestellten Argumente ein untergeordnetes Element der Shell ist oder wenn keine Argumente angegeben werden und die Shell keine nicht erwarteten untergeordneten Elemente hat, ist der Exit-Status 127. Wenn die Option -p angegeben wird, der Prozess oder Job Der Bezeichner des Jobs, für den der Exit-Status zurückgegeben wird, wird der Variablen Varname zugewiesen, die durch das Optionsargument benannt wird. Die Variable wird zunächst vor allen anderen zurückgesetzt Abtretung. Dies ist nur dann sinnvoll, wenn die Option -n angegeben wird. Durch die Angabe der Option -f wird bei aktivierter Jobsteuerung warten bis warten erzwungen id soll beendet werden, bevor der Status zurückgegeben wird, anstatt zurückzukehren, wenn der Status geändert wird. Wenn id einen nicht vorhandenen Prozess oder Job angibt, ist der Rückgabestatus 127. Andernfalls ist der Rückgabestatus der Exit-Status des letzten Prozesses oder Jobs, auf den gewartet wurde.

SHELL-KOMPATIBILITÄTSMODUS

Bash-4.0 führte das Konzept eines „Shell-Kompatibilitätsgrads“ ein, der als eine Reihe von Optionen für die Shopt-Integrationen compat31, compat32, compat40 angegeben wird , compat41 usw.). Es gibt nur eine aktuelle Kompatibilitätsstufe – jede Option schließt sich gegenseitig aus. Der Kompatibilitätsgrad soll es Benutzern ermöglichen, Verhalten aus früheren Versionen auszuwählen, das mit neueren Versionen nicht kompatibel ist, während sie Skripte migrieren, um aktuelle Funktionen und Verhalten zu verwenden. Es soll eine Übergangslösung sein.

In diesem Abschnitt wird kein Verhalten erwähnt, das für eine bestimmte Version Standard ist (z. B. bedeutet die Einstellung compat32), dass das Zitieren des rhs des regulären Ausdrucks-Übereinstimmungsoperators spezielle reguläre Ausdruckszeichen im Wort zitiert, was das Standardverhalten in Bash ist. 3.2 und höher).

Wenn ein Benutzer beispielsweise compat32» aktiviert, kann sich dies auf das Verhalten anderer Kompatibilitätsstufen bis einschließlich der aktuellen Kompatibilitätsstufe auswirken. Die Idee ist, dass jede Kompatibilitätsstufe das Verhalten steuert, das sich in dieser Version von bash geändert hat, dieses Verhalten jedoch möglicherweise in früheren Versionen vorhanden war. Die Änderung zur Verwendung gebietsschemabasierter Vergleiche mit dem Befehl [[ erfolgte beispielsweise in Bash-4.1, und frühere Versionen verwendeten ASCII-basierte Vergleiche, sodass durch die Aktivierung von compat32 ASCII-basierte Vergleiche aktiviert werden Auch. Diese Granularität reicht möglicherweise nicht für alle Verwendungszwecke aus, weshalb Benutzer die Kompatibilitätsstufen sorgfältig einsetzen sollten. Lesen Sie die Dokumentation für eine bestimmte Funktion, um das aktuelle Verhalten herauszufinden.

Mit Bash-4.3 wurde eine neue Shell-Variable eingeführt:

BASH_COMPAT. Der dieser Variablen zugewiesene Wert (eine dezimale Versionsnummer wie 4.2 oder eine ganze Zahl, die der Option compatNN entspricht, wie 42) bestimmt die Kompatibilitätsgrad.

Beginnend mit Bash-4.4 hat Bash damit begonnen, ältere Kompatibilitätsstufen abzulehnen. Letztendlich werden die Optionen zugunsten von BASH_COMPAT entfernt.

Bash-5.0 ist die endgültige Version, für die es eine individuelle Shopt-Option für die vorherige Version geben wird. Benutzer sollten BASH_COMPAT auf Bash-5.0 und späteren Versionen verwenden.

In der folgenden Tabelle werden die Verhaltensänderungen beschrieben, die von den einzelnen Kompatibilitätsstufeneinstellungen gesteuert werden. Das compatNN-Tag wird als Abkürzung für die Einstellung des Kompatibilitätsgrads auf NN unter Verwendung eines der folgenden verwendet folgenden Mechanismen. Für Versionen vor Bash-5.0 kann der Kompatibilitätsgrad mithilfe der entsprechenden Shopt-Option compatNN festgelegt werden. Für Bash-4.3 und spätere Versionen wird die Variable BASH_COMPAT bevorzugt und ist für Bash-5.1 und spätere Versionen erforderlich.

compat31
  • Das Zitieren des rhs des Regexp-Matching-Operators (=~) des Befehls [[] hat keine besondere Auswirkung

compat32
  • Das Unterbrechen einer Befehlsliste wie „a ; b ; c“ führt zur Ausführung des nächsten Befehls in der Liste (in Bash-4.0 und späteren Versionen verhält sich die Shell so, als ob sie die Unterbrechung erhalten hätte, sodass das Unterbrechen eines Befehls in einer Liste abgebrochen wird die Ausführung der gesamten Liste)

compat40
  • Die Operatoren < und > des Befehls [[ berücksichtigen beim Vergleich von Zeichenfolgen nicht das aktuelle Gebietsschema. Sie verwenden die ASCII-Reihenfolge. Bash-Versionen vor Bash-4.1 verwenden ASCII-Sortierung und strcmp(3); bash-4.1 und höher verwenden die Sortierreihenfolge des aktuellen Gebietsschemas und strcoll(3).

compat41
  • Im posix-Modus können auf die Zeit Optionen folgen und sie dennoch als reserviertes Wort erkannt werden (dies ist POSIX-Interpretation 267).

  • Im posix-Modus erfordert der Parser, dass eine gerade Anzahl einfacher Anführungszeichen im Wort-Teil eines doppelten Anführungszeichens vorkommt. Parametererweiterung und behandelt sie speziell, sodass Zeichen in einfachen Anführungszeichen als Anführungszeichen betrachtet werden (dies ist POSIX-Interpretation 221).

compat42
  • Die Ersetzungszeichenfolge bei der Musterersetzung in doppelte Anführungszeichen wird nicht wie in Versionen nach Bash-4.2 in Anführungszeichen entfernt

  • Im Posix-Modus werden einfache Anführungszeichen beim Erweitern des Wort-Teils einer Parametererweiterung in doppelte Anführungszeichen als Sonderzeichen betrachtet und können verwendet werden, um eine schließende geschweifte Klammer oder ein anderes Sonderzeichen (dieses) in Anführungszeichen zu setzen ist Teil der POSIX-Interpretation 221); In späteren Versionen sind einfache Anführungszeichen bei Worterweiterungen in doppelten Anführungszeichen keine Besonderheit

compat43
  • Die Shell gibt keine Warnmeldung aus, wenn versucht wird, eine zusammengesetzte Zuweisung in Anführungszeichen als Argument für die Deklaration zu verwenden (declare -a foo='(1 2)'). Spätere Versionen warnen, dass diese Verwendung veraltet ist

  • Worterweiterungsfehler gelten als nicht schwerwiegende Fehler, die dazu führen, dass der aktuelle Befehl fehlschlägt, selbst im Posix-Modus (das Standardverhalten besteht darin, sie zu schwerwiegenden Fehlern zu machen, die zum Beenden der Shell führen).

  • Beim Ausführen einer Shell-Funktion wird der Schleifenstatus (while/until/etc.) nicht zurückgesetzt, sodass Break oder Continue in dieser Funktion die Schleifen im aufrufenden Kontext unterbrechen oder fortsetzen. Bash-4.4 und höher setzen den Schleifenstatus zurück, um dies zu verhindern

compat44
  • Die Shell richtet die von BASH_ARGV und BASH_ARGC verwendeten Werte ein, sodass sie auf die Positionsparameter der Shell erweitert werden können, auch wenn der erweiterte Debugging-Modus nicht aktiviert ist

  • Eine Subshell erbt Schleifen von ihrem übergeordneten Kontext, sodass break oder continue dazu führt, dass die Subshell beendet wird. Bash-5.0 und höher setzen den Schleifenstatus zurück, um das Beenden zu verhindern

  • Variablenzuweisungen vor integrierten Funktionen wie export und readonly, die Attribute festlegen, wirken sich weiterhin auf Variablen mit demselben Namen in der aufrufenden Umgebung aus, auch wenn sich die Shell nicht im Posix-Modus befindet

compat50
  • Bash-5.1 hat die Art und Weise, wie $RANDOM generiert wird, geändert, um etwas mehr Zufälligkeit einzuführen. Wenn der Shell-Kompatibilitätsgrad auf 50 oder niedriger eingestellt ist, wird auf die Methode von Bash-5.0 und früheren Versionen zurückgegriffen, sodass das Seeding des Zufallszahlengenerators durch Zuweisen eines Werts zu < RANDOM dieselbe Sequenz erzeugt wie in bash-5.0/p>

  • Wenn die Befehls-Hash-Tabelle leer ist, haben Bash-Versionen vor Bash-5.1 eine entsprechende Informationsmeldung ausgegeben, selbst wenn eine Ausgabe erzeugt wurde, die als Eingabe wiederverwendet werden kann. Bash-5.1 unterdrückt diese Meldung, wenn die Option -l angegeben wird.

EINGESCHRÄNKTE SCHALE

Wenn bash mit dem Namen rbash gestartet wird oder beim Aufruf die Option -r angegeben wird, wird die Shell eingeschränkt. Eine eingeschränkte Shell wird verwendet, um eine Umgebung einzurichten, die kontrollierter ist als die Standard-Shell. Es verhält sich genauso wie bash, mit der Ausnahme, dass Folgendes nicht zulässig ist oder nicht ausgeführt wird:

  • Verzeichniswechsel mit cd

  • Setzen oder Deaktivieren der Werte von SHELL, PATH, HISTFILE, ENV oder BASH_ENV >

  • Angabe von Befehlsnamen, die / enthalten

  • Angabe eines Dateinamens mit einem / als Argument für den integrierten Befehl .

  • Angabe eines Dateinamens, der einen Schrägstrich enthält, als Argument für den integrierten Befehl history

  • Angabe eines Dateinamens, der einen Schrägstrich enthält, als Argument für die Option -p des integrierten Befehls hash

  • Importieren von Funktionsdefinitionen aus der Shell-Umgebung beim Start

  • Analysieren des Werts von SHELLOPTS aus der Shell-Umgebung beim Start

  • Umleiten der Ausgabe mithilfe der Umleitungsoperatoren >, >|, <>, >&, &> und >>

  • Verwenden des integrierten Befehls exec, um die Shell durch einen anderen Befehl zu ersetzen

  • Hinzufügen oder Löschen integrierter Befehle mit den Optionen -f und -d zum integrierten Befehl enable

  • Verwenden Sie den Befehl enablebuiltin, um deaktivierte Shell-Builtins zu aktivieren

  • Angabe der Option -p für den integrierten Befehl command

  • Deaktivieren Sie den eingeschränkten Modus mit set +r oder set +o eingeschränkt.

Diese Einschränkungen werden erzwungen, nachdem alle Startdateien gelesen wurden.

rbash deaktiviert alle Einschränkungen in der Shell, die zum Ausführen des Skripts erzeugt wird.

SIEHE AUCH

Bash Reference Manual, Brian Fox and Chet Ramey
The Gnu Readline Library, Brian Fox and Chet Ramey
The Gnu History Library, Brian Fox and Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell and Utilities, IEEE --

http://pubs.opengroup.org/onlinepubs/9699919799/

http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)

DATEIEN

 /bin/bash 

Die ausführbare Bash-Datei

 /etc/profile 

Die systemweite Initialisierungsdatei, die für Login-Shells ausgeführt wird

 ~/.bash_profile 

Die persönliche Initialisierungsdatei, die für Login-Shells ausgeführt wird

 ~/.bashrc 

Die individuelle Startdatei pro interaktiver Shell

 ~/.bash_logout 

Die individuelle Bereinigungsdatei der Login-Shell, die ausgeführt wird, wenn eine Login-Shell beendet wird

 ~/.inputrc 

Individuelle readlineInitialisierungsdatei

AUTOREN

Brian Fox, Free Software Foundation
bfox@gnu.org

Chet Ramey, Case Western Reserve University
chet.ramey@case.edu

FEHLERBERICHTE

Wenn Sie einen Fehler in bash finden, sollten Sie ihn melden. Aber zuerst sollten Sie sicherstellen, dass es sich wirklich um einen Fehler handelt und dass er in der neuesten Version von bash auftritt. Die neueste Version ist immer verfügbar unter ftp://ftp.gnu.org/pub/gnu/bash/.

Sobald Sie festgestellt haben, dass tatsächlich ein Fehler vorliegt, verwenden Sie den Befehl bashbug, um einen Fehlerbericht einzureichen. Wenn Sie eine Lösung haben, senden Sie diese bitte ebenfalls per E-Mail! Vorschläge und „philosophische“ Fehlerberichte können per E-Mail an bug-bash@gnu.org oder in der Usenet-Newsgroup gnu.bash.bug gepostet werden .

ALLE Fehlerberichte sollten Folgendes enthalten:

The version number of bash
The hardware and operating system
The compiler used to compile
A description of the bug behaviour
A short script or `recipe' which exercises the bug

bashbug fügt die ersten drei Elemente automatisch in die Vorlage ein, die es zum Einreichen eines Fehlerberichts bereitstellt.

Kommentare und Fehlerberichte zu dieser Handbuchseite sollten an chet.ramey@case.edu gerichtet werden.

Fehler

Es ist zu groß und zu langsam.

Es gibt einige subtile Unterschiede zwischen bash und herkömmlichen Versionen von sh, hauptsächlich aufgrund der POSIX-Spezifikation.

Aliase sind in manchen Fällen verwirrend.

In der Shell integrierte Befehle und Funktionen können nicht gestoppt/neu gestartet werden.

Zusammengesetzte Befehle und Befehlssequenzen der Form „a; B ; c' werden nicht ordnungsgemäß behandelt, wenn versucht wird, den Prozess anzuhalten. Wenn ein Prozess gestoppt wird, führt die Shell sofort den nächsten Befehl in der Sequenz aus. Es reicht aus, die Befehlsfolge in Klammern zu setzen, um sie in eine Unterschale zu zwingen, die als Einheit gestoppt werden kann.

Array-Variablen dürfen (noch) nicht exportiert werden.

Es kann jeweils nur ein aktiver Coprozess vorhanden sein.

Alle Rechte vorbehalten. © LinuxOS.Info • 2023