Ich folge einem Tutorial und es wird erwähnt, dass dieser Befehl ausgeführt werden soll:
sudo chmod 700 !$
Ich bin nicht vertraut mit !$
. Was heißt das?
bash
command-history
Andrew
quelle
quelle
echo
etwas zu versuchen, wenn Sie nicht sicher sind, was es tun wird.echo $(rm -rf /)
--no-preserve-root
Option. Wenn Sie in einem Programm die Wörter "no preserve" sehen, überlegen Sie sich besser genau, was es bewirkt.Antworten:
Grundsätzlich ist es das letzte Argument zum vorherigen Befehl.
( 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
echo Foo
Enterecho !$ Jar
Enter Up Enter; undecho Foo
Enterecho $_ Jar
Enter Up Enter.(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 lautetFoo 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 jetztJar
der Fall, sodass die letzte in stdout geschriebene Zeile lautetJar Jar
.Eine weitere Konsequenz ist, dass
_
bei anderen Parametererweiterungen beispielsweise die Befehlsfolge verwendet werden kanndruckt
isomorphism isosceles
. Aber es gibt keine "${!$%morphism}
" analoge Erweiterung.Weitere Informationen zu den Expansionsphasen in Bash finden Sie im
EXPANSION
Abschnitt vonman 1 bash
( in der Online-Ausgabe heißt dies Shell Expansions ). DerHISTORY EXPANSION
Abschnitt ist getrennt.quelle
!$
insert-last-argument
, normalerweise gebunden anM-.
.Genau genommen
!$
ist das letzte Wort des letzten Befehls aus der Verlaufsliste.Beispiele:
quelle
!$
Gibt Ihnen den letzten Befehl, der für diesen bestimmten Benutzer verwendet wurde.Sie können den Verlauf der zuvor verwendeten Befehle auch mit
history
command ermitteln ... probieren Sie es aus ....HINWEIS: Für einen bestimmten Benutzer werden alle zuvor verwendeten Befehle in der Bash-Verlaufsdatei gespeichert.
quelle