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

$_ Gegen !$. Letztes Argument des vorhergehenden Befehls und Ausgabeumleitung?

Die Frage bezieht sich auf spezielle Variablen. Dokumentation sagt:

!!:$

bezeichnet das letzte Argument des vorhergehenden Befehls . Dies kann
zu !$ abgekürzt werden .

($_ , 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 in der
Umgebung oder Argumentliste übergeben. Erweitert anschließend zum letzten Argument des vorherigen Befehls nach Ausbau. Auch auf den vollständigen Pfadnamen gesetzt, der verwendet wird, um jeden Befehl aufzurufen, der ausgeführt und in die Umgebung
platziert wird, die in diesen Befehl exportiert wird.

Es muss einen Unterschied geben, den ich nicht erkennen kann, denn:

$ echo "hello" > /tmp/a.txt
$ echo "!$"
echo "/tmp/a.txt"
/tmp/a.txt

$ echo "hello" > /tmp/a.txt
$ echo $_
hello

Was ist der Unterschied?

Akzeptierte Antwort:

!$ ist ein Wortbezeichner der Verlaufserweiterung, er erweitert sich zum letzten Wort des vorherigen Befehls im Verlauf . IOW, das letzte Wort des vorherigen Eintrags in der Geschichte. Dieses Wort ist normalerweise das letzte Argument für den Befehl, aber nicht im Falle einer Umleitung. In:

echo "hello" > /tmp/a.txt

der ganze Befehl 'echo "hello" > /tmp/a.txt' erschien im Verlauf und /tmp/a.txt ist das letzte Wort dieses Befehls.

_ ein Shell-Parameter ist, wird er zum letzten Argument des vorherigen Befehls erweitert. Hier ist die Umleitung kein Teil der Argumente, die an den Befehl übergeben werden, also nur hello ist das an echo übergebene Argument . Deshalb $_ erweitert zu hello .

_ ist nicht mehr einer der Shell-Standard-Sonderparameter. Es funktioniert in bash , zsh , mksh und dash nur wenn interaktiv, ksh93 nur wenn zwei Befehle in getrennten Zeilen stehen:

$ echo 1 && echo $_
1
/usr/bin/ksh

$ echo 1
1
$ echo $_
1

Linux
  1. Arbeiten mit Eingabeausgabe und Fehlerumleitung in Linux

  2. Übergeben Sie die Ausgabe des vorherigen Befehls als Argument an den nächsten?

  3. Io-Umleitung und der Head-Befehl?

  4. Wie greife ich auf das letzte Argument eines kommentierten Befehls zu?

  5. 3 Tricks, um mehrere Befehle in derselben Zeile auszugeben

Prettyping – Machen Sie die Ausgabe des Ping-Befehls schöner und leichter lesbar

So ändern Sie die Ausgabefarbe von „Echo“ in Linux

Erklärt:Eingabe-, Ausgabe- und Fehlerumleitung in Linux

Beispiele für Linux-Echo-Befehle

Unterschiedliche Farbe für Befehl und Ausgabe

Verzeichnisse rekursiv durchlaufen und einen Befehl für eine Datei im Verzeichnis ausführen