Grundsätzlich ist es das letzte Argument zum vorherigen Befehl.
!$
ist das "Ende" des vorherigen Befehls. Betrachten Sie das folgende Beispiel: Wir beginnen mit der Suche nach einem Wort in einer Datei:
grep -i joe /some/long/directory/structure/user-lists/list-15
Wenn sich Joe in dieser Benutzerliste befindet, möchten wir ihn daraus entfernen. Wir können entweder vi mit diesem langen Verzeichnisbaum als Argument vi !$
starten oder so einfach wie Which bash expand to:
vi /some/long/directory/structure/user-lists/list-15
( Quelle ; handliche Anleitung übrigens)
Es ist nichts wert, zwischen diesem !$
Token und der speziellen Shell-Variablen zu unterscheiden $_
. Tatsächlich werden beide zum letzten Argument des vorherigen Befehls erweitert. Wird !$
jedoch während der Verlaufserweiterung erweitert , während $_
sie während der Parametererweiterung erweitert wird . Eine wichtige Folge davon ist, dass !$
der erweiterte Befehl bei Verwendung in Ihrem Verlauf gespeichert wird.
Betrachten Sie beispielsweise die Tastenanschläge
(Die einzigen Zeichen, die geändert werden, sind das $!
und $_
in der Mitte.)
Wenn Sie im ersten Fall drücken Up, wird in der Befehlszeile Folgendes angezeigt echo Foo Jar
: Die letzte in stdout geschriebene Zeile lautet Foo Jar
.
Wenn Sie in letzterem Fall drücken Up, wird in der Befehlszeile Folgendes angezeigt echo $_ bar
, jedoch $_
mit einem anderen Wert als zuvor. In der Tat $_
ist dies jetzt Jar
der Fall, sodass die letzte in stdout geschriebene Zeile lautet Jar Jar
.
Eine weitere Konsequenz ist, dass _
bei anderen Parametererweiterungen beispielsweise die Befehlsfolge verwendet werden kann
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
druckt isomorphism isosceles
. Aber es gibt keine " ${!$%morphism}
" analoge Erweiterung.
Weitere Informationen zu den Expansionsphasen in Bash finden Sie im EXPANSION
Abschnitt von man 1 bash
( in der Online-Ausgabe heißt dies Shell Expansions ). Der HISTORY EXPANSION
Abschnitt ist getrennt.
echo
etwas zu versuchen, wenn Sie nicht sicher sind, was es tun wird.