GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Welches sind die speziellen Parameter/Variablen der (Bash-)Shell?

Ich habe einige spezielle Parameter mit Bash gefunden, die mit $ beginnen Schild. Beispiel:Als ich nach dem Exit-Status gesucht habe, wusste ich von $? , Prozess-ID durch $$ usw.

Also, ich teile Dieser Beitrag, um zu erfahren, welche speziellen Bash-(Shell-)Parameter sind und wie sie verwendet werden.

Akzeptierte Antwort:

Verweis auf 3.4.2 Spezielle Parameter aus dem Bash-Referenzhandbuch.

Spezielle Parameter:

  • $*

($*) Erweitert auf die Positionsparameter, beginnend bei eins. Wenn die Erweiterung nicht in doppelte Anführungszeichen gesetzt wird, wird jeder Positionsparameter zu einem separaten Wort erweitert. In Kontexten, in denen dies durchgefü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 IFS-Sondervariablen getrennt wird. Das heißt, „$*“ entspricht „$1c$2c…“, 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 dazwischenliegende Trennzeichen verbunden.

  • [E-Mail-geschützt]

([email protected]) Erweitert auf die Positionsparameter, beginnend bei eins. Wenn die Erweiterung in doppelten Anführungszeichen erfolgt, wird jeder Parameter zu einem separaten Wort erweitert. Das heißt, „[E-Mail-geschützt]“ entspricht „$1“, „$2“ …. Wenn die Erweiterung in doppelten Anführungszeichen innerhalb eines Wortes auftritt, wird die Erweiterung des ersten Parameters mit dem Anfangsteil des ursprünglichen Wortes verbunden, und die Erweiterung des letzten Parameters wird mit dem letzten Teil des ursprünglichen Wortes verbunden. Wenn keine Positionsparameter vorhanden sind, werden „[E-Mail-geschützt]“ und [E-Mail-geschützt] zu nichts erweitert (d. h. sie werden entfernt).

  • $#

($#) Erweitert auf die Anzahl der Positionsparameter in Dezimalzahl.

  • $?

($?) Erweitert auf den Exit-Status der zuletzt ausgeführten Vordergrund-Pipeline.

  • $-

($-, ein Bindestrich.) Erweitert auf die aktuellen Options-Flags, wie sie beim Aufruf, durch den eingebauten Befehl set oder durch die Shell selbst gesetzt wurden (wie die Option -i).

  • $$

($$) Erweitert auf die Prozess-ID der Shell. In einer ()-Subshell wird es zur Prozess-ID der aufrufenden Shell erweitert, nicht zur Subshell.

  • $!

($!) Erweitert auf die Prozess-ID des Jobs, der zuletzt in den Hintergrund gestellt wurde, unabhängig davon, ob er als asynchroner Befehl ausgeführt wird oder das bg builtin verwendet (siehe Job Control Builtins).

  • $0

($0) Erweitert auf den Namen der Shell oder des Shell-Skripts. Dies wird bei der Shell-Initialisierung gesetzt. Wenn Bash mit einer Befehlsdatei aufgerufen wird (siehe Shell-Skripte), wird $0 auf den Namen dieser Datei gesetzt. Wenn Bash mit der Option -c gestartet wird (siehe Bash aufrufen), dann wird $0 auf das erste Argument nach dem auszuführenden String gesetzt, falls einer vorhanden ist. Andernfalls wird es auf den Dateinamen gesetzt, der zum Aufrufen von Bash verwendet wird, wie durch Argument null angegeben.

Dies kann auch von der Manpage von bash gedruckt werden:

$ man bash | awk '/Special Parameters$/','/Shell Variables$/'

Die obigen sind die gleichen wie die speziellen Parameter, die in POSIX definiert sind.

Verwandte:Was macht „set -f“ in der Korn-Shell?

Zusätzlich gibt es die Positionsparameter $1 , $2 , … die die Befehlszeilenargumente für die Shell oder die aktuelle Funktion enthalten (3.4.1 Positionsparameter). Sie sind auch eine POSIX-Funktion.

Ältere Versionen von Bash führten auch $_ auf als spezieller Parameter, wird aber jetzt neben anderen Variablen aufgeführt, die von der Shell gesetzt werden (5.2 Bash-Variablen). $_ ist nicht POSIX und wird von anderen Shells möglicherweise nicht unterstützt.

  • $_

($_ , ein Unterstrich.) Beim Start der Shell auf den absoluten Pfadnamen setzen, der verwendet wird, um die Shell oder das Shell-Skript aufzurufen, das ausgeführt wird, wie es in der Umgebungs- oder Argumentliste übergeben wird. Anschließend wird nach der Erweiterung bis zum letzten Argument des vorherigen Befehls erweitert. Auch auf den vollständigen Pfadnamen gesetzt, der verwendet wird, um jeden Befehl aufzurufen, der ausgeführt und in der Umgebung abgelegt wird, die in diesen Befehl exportiert wurde. Beim Überprüfen von E-Mails enthält dieser Parameter den Namen der E-Mail-Datei.


Linux
  1. Welcher Shell-Interpreter führt ein Skript ohne Shebang aus?

  2. Schnelle Verzeichnisnavigation in der Bash-Shell?

  3. Gibt es Namenskonventionen für Variablen in Shell-Skripten?

  4. Unterschied zwischen exportierten und nicht in Bash enthaltenen Shell-Variablen?

  5. Der Unterschied in der Verwendung zwischen Shell-Variablen und Umgebungsvariablen?

Anpassen der Bash-Shell

So finden Sie heraus, welche Shell Sie unter Linux verwenden

Was sind die verschiedenen Arten von Shells in Linux?

Variablen in der Bash-Shell unter Linux verstehen

Shell-Befehle sind in welcher Sprache geschrieben?

Welchen Umfang haben exportierte Unix-Shell-Variablen?