Grundlegendes zur Linux / Unix-Befehls-Bash

Alles, was Sie jemals über Bash wissen müssen und noch viel mehr

Der Linux-Befehl Bash ist ein sh- kompatibler Befehlsspracheninterpreter, der Befehle ausführt, die von der Standardeingabe oder aus einer Datei gelesen werden. Bash enthält auch nützliche Funktionen aus den Korn- und C-Shells ( ksh und csh ).

Bash-Optionen

Zusätzlich zu den in der Beschreibung des Befehls set builtin dokumentierten Shell-Optionen für einzelne Zeichen interpretiert bash beim Aufrufen die folgenden Optionen:

  • -c Zeichenkette: Wenn die Option -c vorhanden ist, werden Befehle aus der Zeichenkette gelesen. Befinden sich nach der Zeichenfolge Argumente, werden diese den Positionsparametern zugewiesen, beginnend mit $ 0 .
  • -i : Wenn die Option -i vorhanden ist, ist die Shell interaktiv.
  • -l : Stellen Sie bash so ein , als ob es als Anmeldeshell aufgerufen worden wäre.
  • -r : Wenn die Option -r vorhanden ist, wird die Shell eingeschränkt.
  • -s : Wenn die Option -s vorhanden ist oder nach der Optionsverarbeitung keine Argumente mehr vorhanden sind, werden Befehle aus der Standardeingabe gelesen. Mit dieser Option können die Positionsparameter beim Aufrufen einer interaktiven Shell festgelegt werden.
  • -D : Eine Liste aller Zeichenfolgen in doppelten Anführungszeichen, denen $ vorangestellt ist, wird in der Standardausgabe gedruckt. 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 integrierten shopt akzeptiert werden. Wenn shopt_option vorhanden ist, setzt -O den Wert dieser Option und + O setzt ihn zurück. Wenn shopt_option nicht angegeben wird, werden die Namen und Werte der von shopt akzeptierten Shell-Optionen auf der Standardausgabe gedruckt. Wenn die Aufrufoption + O ist , wird die Ausgabe in einem Format angezeigt, das als Eingabe wiederverwendet werden kann.
  • - : A - signalisiert das Ende von Optionen und deaktiviert die weitere Optionsverarbeitung. Alle Argumente nach dem - werden als Dateinamen und Argumente behandelt. Ein Argument von - entspricht - .

Bash interpretiert auch eine Reihe von Optionen mit mehreren Zeichen. Diese Optionen müssen in der Befehlszeile vor den einzelnen Zeichen angezeigt werden, um erkannt zu werden:

  • --dump-po-strings : Entspricht -D , aber die Ausgabe erfolgt im GNU-Dateiformat gettext po (Portable Object).
  • --dump-strings : Entspricht -D .
  • --help : Zeigt eine Verwendungsmeldung in der Standardausgabe an und beendet sie erfolgreich.
  • --init-file : file und --rcfile file: Ausführen von Befehlen aus einer Datei anstelle der Standarddatei für die persönliche Initialisierung ~ / .bashrc, wenn die Shell interaktiv ist.
  • --login : Entspricht -l .
  • --noediting : Verwenden Sie die GNU- Readline- Bibliothek nicht zum Lesen von Befehlszeilen, wenn die Shell interaktiv ist.
  • --noprofile : Lesen Sie nicht die systemweite Startdatei / etc / profile oder eine der persönlichen Initialisierungsdateien ~ / .bash_profile, ~ / .bash_login oder ~ / .profile. Standardmäßig liest bash diese Dateien, wenn es als Anmeldeshell aufgerufen wird.
  • --norc : Lies und führe die persönliche Initialisierungsdatei ~ / .bashrc nicht aus, wenn die Shell interaktiv ist. Diese Option ist standardmäßig aktiviert, wenn die Shell als sh aufgerufen wird.
  • --posix : Ändert das Verhalten von bash, wenn die Standardoperation vom POSIX-Standard abweicht, um dem Standard zu entsprechen (Posix-Modus).
  • --restricted : Die Shell wird eingeschränkt.
  • --rpm-erfordert : Erstellen Sie die Liste der Dateien, die für die Ausführung des Shell-Skripts erforderlich sind. Dies impliziert '-n' und unterliegt denselben Einschränkungen wie die Prüfung auf Fehler bei der Kompilierungszeit. Backticks, [] -Tests und Evaluierungen werden nicht analysiert, sodass einige Abhängigkeiten möglicherweise übersehen werden.
  • --verbose : Entspricht -v .
  • --version : Versionsinformationen für diese Bash- Instanz in der Standardausgabe anzeigen und erfolgreich beenden.

Argumente

Wenn nach der Optionsverarbeitung noch Argumente vorhanden sind und weder die Option -c noch die Option -s angegeben wurden, wird angenommen, 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. dann geht. Der Exit-Status von Bash ist der Exit-Status des letzten im Skript ausgeführten Befehls. Wenn keine Befehle ausgeführt werden, ist der Beendigungsstatus 0. Es wird zuerst versucht, die Datei im aktuellen Verzeichnis zu öffnen. Wenn keine Datei gefunden wird, durchsucht die Shell die Verzeichnisse in PATH nach dem Skript.

Aufruf

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

Eine interaktive Shell wird ohne optionale Argumente und ohne die Option -c gestartet, deren Standardeingabe und -ausgabe beide mit Terminals verbunden sind, wie durch isatty (3) festgelegt, oder mit der Option -i gestartet. PS1 ist gesetzt und $ - schließt ein, wenn bash interaktiv ist, sodass ein Shell-Skript oder eine Startdatei diesen Status testen kann.

In den folgenden Abschnitten wird beschrieben, wie bash die Startdateien ausführt. Wenn eine der Dateien existiert, aber nicht gelesen werden kann, meldet bash einen Fehler. Tildes werden in Dateinamen wie in Tilde-Erweiterung beschrieben erweitert.

Wenn bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der Option --login aufgerufen wird , werden zuerst Befehle aus der Datei / etc / profile gelesen und ausgeführt, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie in dieser Reihenfolge nach ~ / .bash_profile, ~ / .bash_login und ~ / .profile und liest und führt Befehle von der ersten Datei aus, die vorhanden und lesbar ist. Die Option --noprofile kann verwendet werden, wenn die Shell gestartet wird, um dieses Verhalten zu unterbinden .

Wenn eine Anmeldeshell beendet wird, liest bash Befehle aus der Datei ~ / .bash_logout und führt sie aus, falls vorhanden.

Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest bash Befehle von ~ / .bashrc und führt sie aus, sofern diese Datei vorhanden ist. Dies kann mit der Option --norc verhindert werden . Die Option --rcfile file erzwingt , dass Bash anstelle von ~ / .bashrc Befehle aus der Datei liest und ausführt.

Wenn bash nicht interaktiv gestartet wird, um beispielsweise ein Shell-Skript auszuführen , sucht es in der Umgebung nach der Variablen BASH_ENV , erweitert ihren Wert, falls sie dort angezeigt wird, und verwendet den erweiterten Wert als Namen einer Datei, die gelesen und ausgeführt werden soll . Bash verhält sich so, als ob der folgende Befehl ausgeführt wurde:

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

Der Wert der PATH- Variablen wird jedoch nicht zum Suchen des Dateinamens verwendet.

Wenn bash mit dem Namen sh aufgerufen wird, wird versucht, das Startverhalten historischer Versionen von sh so genau wie möglich nachzuahmen, wobei auch der POSIX-Standard eingehalten wird. Beim Aufrufen als interaktive Anmeldeshell oder als nicht interaktive Shell mit der Option --login wird zuerst versucht, die Befehle aus / etc / profile und ~ / .profile in dieser Reihenfolge zu lesen und auszuführen. Die Option --noprofile kann verwendet werden, um dieses Verhalten zu verhindern. Wenn bash als interaktive Shell mit dem Namen sh aufgerufen wird, sucht es nach der Variablen ENV , erweitert ihren Wert, wenn sie definiert ist, und verwendet den erweiterten Wert als Namen 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 wie bei der Befehlszeilenoption --posix im posix-Modus gestartet wird, folgt es 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 vom Remote-Shell-Daemon ausgeführt wird, normalerweise rshd. Wenn bash feststellt, dass es von rshd ausgeführt wird, liest es Befehle von ~ / .bashrc und führt sie aus, sofern diese Datei vorhanden und lesbar ist. Es wird dies nicht tun, wenn es als sh aufgerufen wird. Die Option --norc kann verwendet werden, um dieses Verhalten zu unterbinden , und die Option --rcfile kann verwendet werden, um das Lesen einer anderen Datei zu erzwingen, aber rshd ruft die Shell im Allgemeinen nicht mit diesen Optionen auf oder lässt deren Angabe zu.

Wenn die Shell mit einer effektiven Benutzer- (Gruppen-) ID gestartet wird, die nicht der tatsächlichen Benutzer- (Gruppen-) ID entspricht, und die Option -p nicht angegeben ist, werden keine Startdateien gelesen, Shell-Funktionen werden nicht von der Umgebung, den SHELLOPTS , geerbt Variable, wenn sie in der Umgebung angezeigt wird, wird ignoriert, und die effektive Benutzer-ID wird auf die tatsächliche Benutzer-ID festgelegt. Wenn die Option -p beim Aufruf angegeben wird, ist das Startverhalten dasselbe, die effektive Benutzer-ID wird jedoch nicht zurückgesetzt.

Definitionen

Die folgenden Definitionen werden im Rest dieses Dokuments verwendet:

  • Leer : Ein Leerzeichen oder ein Tabulator.
  • Wort : Eine Folge von Zeichen, die von der Shell als eine Einheit betrachtet werden. Wird auch als Token bezeichnet .
  • Name : Ein Wort, das nur aus alphanumerischen Zeichen und Unterstrichen besteht und mit einem alphabetischen Zeichen oder einem Unterstrich beginnt. Wird auch als Kennung bezeichnet .
  • Metazeichen : Ein Zeichen, das Wörter trennt, wenn es nicht in Anführungszeichen gesetzt wird . Eine der folgenden Möglichkeiten : &; () Leertaste
  • Steueroperator : Ein Token, das eine Steuerfunktion ausführt. Es ist eines der folgenden Symbole: || & &&; ;; () |

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 einfachen Befehls oder das dritte Wort eines Falls oder eines Befehls lauten:

! case do done elif else esac fi für die Funktion if in select then bis while {} time [[]]

Shell-Grammatik: Einfache Befehle

Ein einfacher Befehl ist eine Folge von optionalen Variablenzuweisungen, gefolgt von durch Leerzeichen getrennten Wörtern und Umleitungen, die von einem Steueroperator beendet werden. Das erste Wort gibt den auszuführenden Befehl an und wird als Argument Null übergeben. Die verbleibenden Wörter werden als Argumente an den aufgerufenen Befehl übergeben.

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

Pipelines

Eine Pipeline ist eine Folge von Befehlen, die durch das Zeichen | getrennt sind . Das Format für eine Pipeline ist [ time [ -p ]] [! ] Befehl [ | befehl2 ...].

Die Standardausgabe des Befehls ist über eine Leitung mit der Standardeingabe von Befehl2 verbunden. Diese Verbindung wird vor allen vom Befehl angegebenen Umleitungen hergestellt.

Wenn das reservierte Wort ! Vor einer Pipeline ist der Beendigungsstatus dieser Pipeline das logische NICHT des Beendigungsstatus des letzten Befehls. Andernfalls ist der Status der Pipeline der Beendigungsstatus des letzten Befehls. Die Shell wartet, bis alle Befehle in der Pipeline beendet sind, bevor sie einen Wert zurückgibt.

Wenn das reservierte Zeitwort vor einer Pipeline steht, werden die verstrichene Zeit sowie die Benutzer- und Systemzeit, die von ihrer Ausführung verbraucht wurden, beim Beenden der Pipeline gemeldet. Die Option -p ändert das Ausgabeformat in das von POSIX angegebene Format. Die Variable TIMEFORMAT kann auf eine Formatzeichenfolge festgelegt werden, die angibt, wie die Zeitinformationen angezeigt werden sollen.

Jeder Befehl in einer Pipeline wird als separater Prozess ausgeführt (z. B. in einer Subshell).

Listen

Eine Liste ist eine Folge von einer oder mehreren Pipelines, die durch einen der Operatoren getrennt sind . , & , && oder || und gegebenenfalls durch einen der folgenden Punkte beendet: , & , oder .

Von diesen Listenoperatoren sind && und || haben den gleichen Vorrang, gefolgt von ; und &, die den gleichen Vorrang haben.

Eine Folge von einer oder mehreren Zeilenumbrüchen kann in einer Liste anstelle eines Semikolons zur Begrenzung von Befehlen angezeigt werden.

Wenn ein Befehl vom Steueroperator & beendet wird , führt die Shell den Befehl im Hintergrund in einer Subshell aus. Die Shell wartet nicht auf den Abschluss des Befehls und der Rückgabestatus ist 0. Befehle durch ein ; getrennt . werden nacheinander ausgeführt; Die Shell wartet darauf, dass die einzelnen Befehle der Reihe nach beendet werden. Der Rückgabestatus ist der Beendigungsstatus des zuletzt ausgeführten Befehls.

Die Steueroperatoren && und || bezeichnen UND-Listen bzw. ODER-Listen. Eine AND-Liste hat die Form

befehl1 && befehl2

Befehl2 wird nur dann ausgeführt, wenn Befehl1 den Beendigungsstatus Null zurückgibt.

Eine ODER-Liste hat das Formular

befehl1 || befehl2

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

Zusammengesetzte Befehle

Ein zusammengesetzter Befehl ist einer der folgenden:

(Liste): Liste wird in einer Subshell ausgeführt. 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 der Liste.

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

((Ausdruck)): Der Ausdruck wird nach den unter Arithmetische Auswertung beschriebenen Regeln ausgewertet . Wenn der Wert des Ausdrucks nicht Null ist, ist der Rückgabestatus 0; Andernfalls lautet der Rückgabestatus 1. Dies ist genau gleichbedeutend mit let "expression".

[[expression]]: Gibt einen Status von 0 oder 1 zurück, abhängig von der Auswertung des bedingten Ausdrucks. Ausdrücke setzen sich aus den nachfolgend unter Bedingte Ausdrücke beschriebenen Primären zusammen. Wortteilung und Pfadnamenerweiterung werden nicht für die Wörter zwischen [[ und ]] ausgeführt . Tilde-Erweiterung, Parameter- und Variablenerweiterung, arithmetische Erweiterung, Befehlssubstitution, Prozessersetzung und Entfernen von Anführungszeichen werden durchgeführt.

Wenn die Operatoren == und ! = Verwendet werden, wird die Zeichenfolge rechts vom Operator als Muster betrachtet und gemäß den unter Mustervergleich beschriebenen Regeln abgeglichen. Der Rückgabewert ist 0, wenn die Zeichenfolge mit dem Muster übereinstimmt oder nicht übereinstimmt, und 1, wenn dies nicht der Fall ist. Jeder Teil des Musters kann in Anführungszeichen gesetzt werden, um die Übereinstimmung als Zeichenfolge zu erzwingen.

Ausdrücke können mit den folgenden Operatoren in absteigender Reihenfolge kombiniert werden:

  • (Ausdruck): Gibt den Wert von Ausdruck zurück. Dies kann verwendet werden, um die normale Priorität von Operatoren zu überschreiben.
  • ! expression: True, wenn expression false ist.
  • expression1 && expression2: True, wenn expression1 und expression2 true sind.
  • Ausdruck1 || expression2: True, wenn entweder expression1 oder expression2 true ist.

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

  • für Name [ in Wort]; Liste zu tun ; done : Die Liste der folgenden Wörter wird erweitert und eine Liste der Elemente erstellt. Der Variablenname wird nacheinander auf jedes Element dieser Liste gesetzt und die Liste wird jedes Mal ausgeführt. Wenn das Wort in weggelassen wird, wird der Befehl for einmal für jeden gesetzten Positionsparameter ausgeführt. Der Rückgabestatus ist der Beendigungsstatus des letzten ausgeführten Befehls. Wenn die Erweiterung der folgenden Elemente zu einer leeren Liste führt, werden keine Befehle ausgeführt und der Rückgabestatus ist 0.
  • für ((Ausdruck1; Ausdruck2; Ausdruck3)); Liste zu tun ; erledigt : Zunächst wird der arithmetische Ausdruck expr1 nach den 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 zu 1 ausgewertet. Der Rückgabewert ist der Beendigungsstatus des letzten ausgeführten Befehls in der Liste oder false, wenn einer der Ausdrücke ungültig ist.
  • Wählen Sie den Namen [ in Wort]; Liste zu tun ; erledigt : Die Liste der folgenden Wörter wird erweitert und generiert eine Liste der Elemente. Der Satz erweiterter Wörter wird auf dem Standardfehler gedruckt, wobei jedem eine Nummer vorangestellt ist. Wenn das Wort in weggelassen wird, werden die Positionsparameter gedruckt. Die PS3- Eingabeaufforderung wird angezeigt und eine Zeile von 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. Bei jedem anderen gelesenen Wert wird name auf null gesetzt. Die gelesene Zeile wird in der Variablen REPLY gespeichert . Die Liste wird nach jeder Auswahl ausgeführt, bis ein Unterbrechungsbefehl ausgeführt wird. Der Beendigungsstatus von select ist der Beendigungsstatus des letzten in list ausgeführten Befehls oder Null, wenn keine Befehle ausgeführt wurden.
  • case word in [[(] pattern [ | pattern]: Ein case- Befehl erweitert zuerst das Wort und versucht, es nacheinander mit den gleichen Übereinstimmungsregeln wie bei der Pfadnamenerweiterung abzugleichen. Wenn eine Übereinstimmung gefunden wird, wird die entsprechende Liste angezeigt wird ausgeführt. Nach der ersten Übereinstimmung werden keine nachfolgenden Übereinstimmungen versucht. Der Beendigungsstatus ist Null, wenn kein Muster übereinstimmt. Andernfalls ist es der Beendigungsstatus des zuletzt in der Liste ausgeführten Befehls.
  • if list; dann Liste; und [ elif liste; dann Liste; ] ... [ else Liste; ] fi : Die if- Liste wird ausgeführt. Wenn der Beendigungsstatus Null ist, wird die Then- Liste ausgeführt. Andernfalls wird jede elif- Liste der Reihe nach ausgeführt, und wenn ihr Beendigungsstatus Null ist, wird die entsprechende then- Liste ausgeführt und der Befehl abgeschlossen. Andernfalls wird die else- Liste ausgeführt, falls vorhanden. Der Beendigungsstatus ist der Beendigungsstatus des zuletzt ausgeführten Befehls oder Null, wenn keine Bedingung als wahr getestet wurde.
  • while Liste; Liste zu tun ; erledigt und bis Liste; Liste zu tun ; done : Der while- Befehl führt die do- Liste kontinuierlich aus, solange der letzte Befehl in der Liste den Exit-Status Null zurückgibt. Der till- Befehl ist identisch mit dem while- Befehl, außer dass der Test negiert wird. Die do- Liste wird ausgeführt, solange der letzte Befehl in der Liste einen Exit-Status ungleich Null zurückgibt. Der Beendigungsstatus der while- und until- Befehle ist der Beendigungsstatus des zuletzt ausgeführten Befehls do list oder Null, wenn keiner ausgeführt wurde.
  • [ Funktion ] Name () {Liste; }: Definiert eine Funktion mit dem Namen name. Der Hauptteil der Funktion ist die Liste der Befehle zwischen {und}. Diese Liste wird ausgeführt, wenn name als Name eines einfachen Befehls angegeben wird. Der Exit-Status einer Funktion ist der Exit-Status des letzten im Body ausgeführten Befehls.

Bemerkungen

In einer nicht interaktiven Shell oder einer interaktiven Shell, in der die Option interactive_comments für die integrierte Funktion shopt aktiviert ist, werden bei einem Wort, das mit # beginnt, dieses Wort und alle verbleibenden Zeichen in dieser Zeile ignoriert. 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

Das Zitieren wird verwendet, um die spezielle Bedeutung bestimmter Zeichen oder Wörter in der Shell zu entfernen. Anführungszeichen können verwendet werden, um die Sonderbehandlung für Sonderzeichen zu deaktivieren, um zu verhindern, dass reservierte Wörter als solche erkannt werden, und um die Parametererweiterung zu verhindern.

Jedes der oben unter Definitionen aufgelisteten 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, wird normalerweise der Verlaufserweiterungscharakter verwendet ! , muss angegeben werden, um eine Erweiterung der Historie zu verhindern.

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

Ein nicht zitierter Backslash ( ) ist das Escapezeichen. Es behält den Literalwert des nächsten folgenden Zeichens bei, mit Ausnahme von. Wenn eine Paar erscheint und der Backslash wird nicht selbst zitiert, der wird als Zeilenfortsetzung behandelt (dh aus dem Eingabestream entfernt und effektiv ignoriert).

Das Einschließen von Zeichen in einfache Anführungszeichen behält den Literalwert jedes Zeichens in den Anführungszeichen bei. Ein einfaches Anführungszeichen darf nicht zwischen einfachen Anführungszeichen stehen, auch wenn ein Backslash vorangestellt ist.

Wenn Sie Zeichen in doppelte Anführungszeichen setzen, bleibt der Literalwert aller Zeichen in den Anführungszeichen erhalten, mit Ausnahme von $ , ' und . Die Zeichen $ und ' behalten ihre besondere Bedeutung in doppelten Anführungszeichen. Der Backslash behält seine spezielle Bedeutung nur bei, wenn auf ihn eines der folgenden Zeichen folgt: $ , ' , " , , oder . Ein Anführungszeichen kann in Anführungszeichen gesetzt werden, indem ein Backslash vorangestellt wird.

Die Sonderparameter * und @ haben in doppelten Anführungszeichen eine besondere Bedeutung.

Wörter der Form $ 'string' werden speziell behandelt. Das Wort wird zu einer Zeichenfolge erweitert, wobei mit einem Backslash versehene Zeichen gemäß dem ANSI C-Standard ersetzt werden. Escape-Sequenzen für umgekehrte Schrägstriche werden, falls vorhanden, wie folgt dekodiert:

  • a : Alarm (Glocke)
  • b : Rücktaste
  • e : ein Fluchtcharakter
  • f : Formularvorschub
  • n : neue Zeile
  • r : Wagenrücklauf
  • t : horizontale Registerkarte
  • v : vertikale Registerkarte
  • : Backslash
  • ' : einfaches Anführungszeichen
  • nnn: das Acht-Bit-Zeichen, dessen Wert der Oktalwert nnn ist (ein bis drei Ziffern)
  • x HH: das Acht-Bit-Zeichen, dessen Wert der Hexadezimalwert HH ist (eine oder zwei Hexadezimalziffern)
  • c x: ein Kontroll-x-Zeichen

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

Eine Zeichenfolge in doppelten Anführungszeichen mit vorangestelltem Dollarzeichen ( $ ) bewirkt, dass die Zeichenfolge entsprechend dem aktuellen Gebietsschema übersetzt wird. Wenn das aktuelle Gebietsschema C oder POSIX ist , 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. Dies kann ein Name, eine Nummer oder eines der Sonderzeichen sein, die unter den Sonderparametern aufgeführt sind. Für die Zwecke der Shell ist eine Variable ein Parameter, der mit einem Namen bezeichnet wird. Eine Variable hat einen Wert und null oder mehr Attribute. Attribute werden mit dem Befehl declare builtin zugewiesen.

Ein Parameter wird gesetzt, wenn ihm ein Wert zugewiesen wurde. Die Nullzeichenfolge ist ein gültiger Wert. Sobald eine Variable festgelegt ist, kann sie nur mit dem integrierten Befehl "unset" zurückgesetzt werden.

Eine Variable kann durch eine Anweisung der folgenden Form zugewiesen werden: name = [value]

Wenn kein Wert angegeben wird, wird der Variablen die Nullzeichenfolge zugewiesen. Alle Werte werden einer Tilde-Erweiterung, einer Parameter- und Variablenerweiterung, einer Befehlssubstitution, einer arithmetischen Erweiterung und einem Entfernen von Anführungszeichen unterzogen. Wenn für die Variable ein ganzzahliges Attribut festgelegt ist, unterliegt der Wert einer arithmetischen Erweiterung, auch wenn die Erweiterung $ ((...)) nicht verwendet wird. Die Wortteilung wird nicht durchgeführt, mit Ausnahme von "$ @", wie unter " Spezielle Parameter " erläutert. Die Pfadnamenerweiterung wird nicht durchgeführt. Zuweisungsanweisungen können auch als Argumente für die Befehle declare , typeset , export , readonly und local builtin angezeigt werden.

Positionsparameter

Ein Positionsparameter ist ein Parameter, der durch eine oder mehrere Ziffern außer der einzelnen Ziffer 0 gekennzeichnet ist. Positionsparameter werden aus den Argumenten der Shell beim Aufrufen zugewiesen und können mit dem Befehl set builtin neu zugewiesen werden. Positionsparameter dürfen nicht mit Zuweisungsanweisungen belegt werden. Die Positionsparameter werden vorübergehend ersetzt, wenn eine Shell-Funktion ausgeführt wird.

Wenn ein Positionsparameter, der aus mehr als einer Ziffer besteht, erweitert wird, muss er in geschweiften Klammern angegeben werden.

Spezielle Parameter

Die Shell behandelt einige Parameter speziell. Diese Parameter dürfen nur referenziert werden; eine Zuordnung zu ihnen ist nicht zulässig.

  • * : Erweitert die Positionsparameter, beginnend mit eins. 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 IFS- Sondervariablen getrennt wird. Das heißt, " $ * " entspricht " $ 1 c $ 2 c ... ", wobei c das erste Zeichen des Werts der IFS- Variablen ist. Wenn IFS nicht gesetzt ist, werden die Parameter durch Leerzeichen getrennt. Wenn IFS null ist, werden die Parameter ohne Trennzeichen verknüpft.
  • @ : Erweitert die Positionsparameter, beginnend mit eins. Wenn die Erweiterung in doppelten Anführungszeichen erfolgt, wird jeder Parameter zu einem separaten Wort erweitert. Das heißt, " $ @ " entspricht " $ 1 " " $ 2 " ... Wenn keine Positionsparameter vorhanden sind, werden " $ @ " und $ @ zu nichts erweitert (sie werden entfernt).
  • # : Erweitert die Anzahl der Positionsparameter in Dezimalzahl.
  • ? : Wird auf den Status der zuletzt ausgeführten Vordergrund-Pipeline erweitert.
  • - : Wird durch den Befehl set builtin oder durch die Shell selbst, wie z. B. die Option -i , auf die beim Aufruf angegebenen aktuellen Optionsflags erweitert.
  • $ : Wird auf die Prozess-ID der Shell erweitert. In einer () - Subshell wird sie auf die Prozess-ID der aktuellen Shell erweitert, nicht auf die Subshell.
  • ! : Wird auf die Prozess-ID des zuletzt ausgeführten Hintergrundbefehls (asynchron) erweitert.
  • 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 dem auszuführenden String gesetzt, sofern einer vorhanden ist. Andernfalls wird der Dateiname verwendet, der zum Aufrufen von bash verwendet wird , wie durch das Argument Null angegeben.
  • _ : Legen Sie beim Starten der Shell den absoluten Dateinamen der Shell oder des Shell-Skripts fest, die bzw. das ausgeführt wird, wie in der Argumentliste angegeben. Wird anschließend nach der Erweiterung auf das letzte Argument des vorherigen Befehls erweitert. Stellen Sie auch den vollständigen Dateinamen jedes Befehls ein, der ausgeführt und in die Umgebung gestellt wird, die in diesen Befehl exportiert wurde. Beim Überprüfen von E-Mails enthält dieser Parameter den Namen der derzeit überprüften Maildatei.

Shell-Variablen

Die folgenden Variablen werden von der Shell festgelegt:

BASH : Wird auf den vollständigen Dateinamen erweitert, der zum Aufrufen dieser Instanz von bash verwendet wird .

BASH_VERSINFO : Eine schreibgeschützte Array-Variable, deren Mitglieder Versionsinformationen für diese Instanz von bash enthalten . Die den Arraymitgliedern 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 Freigabestatus (zum Beispiel 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.

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.

COMP_POINT : Der Index der aktuellen Cursorposition relativ zum