Ich folge einem Tutorial und es wird erwähnt, dass dieser Befehl ausgeführt werden soll:
sudo chmod 700 !$  Ich kenne !$ nicht. Was bedeutet das? 
Kommentare
-  ' ist im Allgemeinen sicher, echoetwas, wenn Sie ' nicht sicher sind, was ' tun wird.
-  @Shadur, nicht immer. echo $(rm -rf /)
-  @cjm Wenn Sie ' nicht auf einem wirklich alten System sind, ' benötigt dort die Option --no-preserve-root, und wenn Sie die Wörter " sehen, wird In einem Programm sollten Sie besser genau überlegen, was es tut.
- @WChargin Seien Sie sehr vorsichtig, wenn Sie davon ausgehen, dass " wirklich alt " und " nicht Linux / keine Verwendung von GNU-Coreutils " sind dasselbe; Sie sind nicht ' t.
Antwort
Grundsätzlich ist es „s das letzte Argument zum vorherigen Befehl.
!$ist das“ Ende „des vorherigen Befehls Betrachten Sie das folgende Beispiel: Wir suchen zunächst nach einem Wort in einer Datei:grep -i joe /some/long/directory/structure/user-lists/list-15Wenn Joe in dieser Benutzerliste ist, möchten wir ihn daraus entfernen Wir können vi entweder mit diesem langen Verzeichnisbaum als Argument oder einfach als
vi !$starten. Welche Bash erweitert sich zu:vi /some/long/directory/structure/user-lists/list-15
( source ; handliche Anleitung übrigens)
 Die Unterscheidung zwischen diesem !$ -Token und der speziellen Shell-Variablen $_ ist nichts wert . In der Tat erweitern  beide  das letzte Argument des vorherigen Befehls. !$ wird jedoch während der  Verlaufserweiterung  erweitert, während $_ während der  Parametererweiterung . Eine wichtige Folge davon ist, dass bei Verwendung von !$ der Befehl  erweitert  in Ihrem Verlauf gespeichert wird. 
Zum Beispiel Betrachten Sie die Tastenanschläge
- 
echo FooGeben Sieecho !$ JarEnter Up Enter ; und 
- 
echo FooGeben Sieecho $_ Jarein Geben Sie Up Enter ein.
 (Die einzigen geänderten Zeichen sind $! und $_ in der Mitte.) 
 Im ersten Fall, wenn Sie  Up  drücken, die Befehlszeile liest echo Foo Jar, daher lautet die letzte in stdout geschriebene Zeile Foo Jar. 
 In letzterem Fall, wenn Sie echo $_ bar, aber jetzt hat $_ einen anderen Wert als zuvor – in der Tat $_ ist jetzt Jar, daher lautet die letzte in stdout geschriebene Zeile Jar Jar. 
 Eine weitere Konsequenz ist, dass _ in anderen Parametererweiterungen verwendet werden kann, z. B. in der Befehlsfolge 
printf "%s " isomorphism printf "%s\n" ${_%morphism}sceles  druckt isomorphism isosceles. Es gibt jedoch keine analoge ${!$%morphism} „-Erweiterung. 
 Weitere Informationen zu den Erweiterungsphasen in Bash finden Sie unter EXPANSION Abschnitt von man 1 bash (dies wird in der Online-Ausgabe als  Shell-Erweiterungen  bezeichnet). Die HISTORY EXPANSION Abschnitt ist separat. 
Kommentare
-  Schön. Gut zu wissen. Auch gut dort ' s Stack Exchange. ' Es ist schwierig, Google nach etwas wie !$
-  Übrigens können Sie in der Befehlszeile das letzte Argument des vorherigen Befehls mit insert-last-argumenteinfügen, normalerweise gebunden anM-..
- @Andrew Bitte denken Sie daran, dies zu akzeptieren, wenn es Ihre Frage beantwortet. Das Akzeptieren und Upvoting anstelle von Kommentaren ist der Ausdruck des Dankes im SE-Netzwerk, siehe hier für die " offizielle " Haltung.
- @ Andrew FYI, ich habe Google nach " bash bang dollar " und erzielte anständige Ergebnisse, einschließlich dieses Links als dritte Auflistung.
- @terdon Ich habe letzte Nacht versucht, die Antwort zu akzeptieren, aber es war so schnell, dass ich es war gezwungen zu warten, um es zu akzeptieren.
zu durchsuchen
Antwort
 Genau genommen !$ ist das letzte Wort des letzten Befehls aus der Verlaufsliste.
Wort – Eine Folge von Zeichen, die von der Shell als Einheit behandelt werden. Wörter dürfen keine nicht zitierten Metazeichen enthalten.
Metazeichen – Ein Zeichen, das, wenn es nicht zitiert wird, Wörter trennt. Ein Metazeichen ist ein Leerzeichen oder eines der folgenden Zeichen: |, &, ;, (, ), < oder >
leer – Ein Leerzeichen oder Tabulatorzeichen.
Beispiele:
set -o history # enable command history set -o histexpand # enable ! style history substitution HISTSIZE=10 # save all lines on the history list HISTCONTROL= HISTIGNORE= date echo !$ # prints date date>/dev/null echo !$ # prints /dev/null echo a b c>/dev/null echo !$ # prints /dev/null HISTCONTROL=ignorespace # lines which begin with a space character are not saved in the history list echo a b c echo d e f # space at the beginning echo !$ # prints c Kommentare
Antwort
 !$ gibt Ihnen den zuletzt verwendeten Befehl für diesen bestimmten Benutzer …. 
 Sie können den Verlauf der zuvor verwendeten Befehle auch mit dem Befehl history ermitteln … probieren Sie es aus …. 
HINWEIS: Für einen bestimmten Benutzer werden alle zuvor verwendeten Befehle in der Bash-Verlaufsdatei gespeichert.
Kommentare
- Die anderen Antworten sind richtig. Dieser ist falsch.