Zusammenfassung der unbekannten Verwendung von "!" in Linux

Zusammenfassung der unbekannten Verwendung von "!" in Linux

Vorwort

Tatsächlich gibt es für das bescheidene „!“ in Linux viele erstaunliche Einsatzmöglichkeiten, die Sie in Erstaunen versetzen werden. In diesem Artikel werden die magischen Verwendungsmöglichkeiten von „!“ ausführlich beschrieben. Werfen wir einen Blick auf die ausführliche Einführung.

Führen Sie den vorherigen Befehl aus

Beispielsweise können Sie nach der Ausführung des vorherigen Befehls die folgende Methode verwenden, um den vorherigen Befehl erneut auszuführen:

$ whereis bash #Befehl bash ausführen: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
$ !! # Führen Sie den vorherigen Befehl erneut aus, wo sich bash befindet
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

!! stellt den zuletzt ausgeführten Befehl dar. Wie Sie sehen, wird bei der Eingabe von zwei Ausrufezeichen der vorherige Befehl angezeigt und gleichzeitig ausgeführt. Normalerweise denken wir natürlich daran, für diese Aufgabe die Taste „AUF“ zu verwenden. Aber wenn es auf der vorherigen Befehlserweiterung basiert, ist !! praktischer.
Sie möchten beispielsweise eine Datei anzeigen, vergessen jedoch, weitere Angaben zu machen:

$ /opt/user/test.txt #Habe vergessen, mehr einzugeben
$ mehr!! #Ist das nicht viel schneller?

Benutzen Sie es! Ist das nicht viel bequemer?

Führen Sie einen Befehl mit dem ersten oder letzten Argument des vorherigen Befehls aus.

Verwenden Sie den letzten Parameter des vorherigen Befehls

Wenn Sie beispielsweise mit ls den Inhalt eines Verzeichnisses ohne Parameter auflisten, dies aber mit dem Parameter -al erneut ausführen möchten, ohne einen langen Parameter angeben zu müssen, können Sie die folgende Methode verwenden:

$ ls /proc/1/task/1/net/tcp
/proc/1/Aufgabe/1/net/tc
$ ls -al !$
ls -al /proc/1/task/1/net/tcp
-r--r--r-- 1 root root 0 22. Dezember 17:30 /proc/1/task/1/net/tcp

Hier stellt !$ den letzten Parameter des vorherigen Befehls dar.

Verwenden Sie den ersten Parameter des vorherigen Befehls

Um den ersten Parameter des vorherigen Befehls zu verwenden, verwenden Sie einfach !^, zum Beispiel:

$ ls -al !^

Entfernen Sie den letzten Parameter und führen Sie den vorherigen Befehl aus

Wenn Sie den vorherigen Befehl ohne den letzten Parameter ausführen möchten:

$ ls -al dir #Angenommen, dir ist eine sehr lange Zeichenfolge $ !:-
ls -al

In welchen Szenarien könnte es verwendet werden? Wenn beispielsweise der letzte Parameter Ihres vorherigen Befehls eine lange Zeichenfolge ist und Sie diese nicht verwenden möchten und das Löschen mit der Rücktaste langsam ist, können Sie die obige Methode verwenden.

Alle Parameter des vorherigen Befehls verwenden

Wir haben bereits erwähnt, dass wir den letzten Parameter des vorherigen Befehls verwenden. Was passiert, wenn es nicht der letzte Parameter ist? Es ist ganz einfach, verwenden Sie einfach !*. Wenn uns beispielsweise bei der Eingabe des Find-Befehls ein Fehler unterläuft und wir diesen korrigieren möchten:

$ fin -name "test.zip" #Das Suchwort hier ist falsch.
$ finden !*
finde ./ -name "test.zip"
./workspaces/shell/find/test.zip
./workspaces/shell/test.zip

Verwenden Sie die im vorherigen Befehl angegebenen Parameter

Einige Leser fragen sich möglicherweise: Was ist, wenn ich nur einen der Parameter verwenden möchte? Befolgen Sie einfach die Regel ![Befehlsname]:[Parameternummer]. Zum Beispiel:

$ cp -rf dira dirb/ #Kopiere dira nach dirb
$ ls -l !cp:2 #Den Inhalt von dira anzeigen ls -l dira
gesamt 0
-rw-rw-r-- 1 hyb hyb 0 Dez 22 17:45 testdatei

Der Effekt ist deutlicher, wenn die Parameter des vorherigen Befehls sehr lang sind und Sie in der Mitte einen Parameter verwenden müssen.

Befehle im Verlauf ausführen

Wir alle wissen, dass wir mit dem Verlaufsbefehl zuvor ausgeführte Befehle anzeigen können, aber wie führen wir die Befehle im Verlauf erneut aus? Wir können die Taste „UP“ zum Anzeigen verwenden, aber wenn der Verlaufsbefehl sehr lang ist, ist das nicht sehr praktisch. In diesem Fall ist „!“ praktisch:

$ Geschichte
(Weitere Inhalte wurden hier weggelassen)
2043 berühren ./dira/testfile
 2044 cp -rf dira dirb/
 2045 ls -al dira
 2046 ls -l dira
 2047 ls -al dira
 2048 ls -l dira
 2049 ls -al dira
 2050 ls -l dira
 2051 Geschichte

Wir können sehen, dass der Verlaufsbefehl die zuvor ausgeführten Befehle anzeigen kann, und wir können auch einen Wert davor sehen. Wenn wir den vorherigen Befehl cp -rf dira dirb/ ausführen möchten, können wir dies eigentlich auf folgende Weise tun:

$ !2044 #2044 ist der n-te ausgeführte Befehl cp -rf dira dirb/

Das heißt, historische Befehle werden über ![historischer Befehlswert] ausgeführt.

Wenn wir den vorletzten Befehl ausführen möchten, gibt es natürlich eine Möglichkeit:

$ !-2 #Auf das Ausrufezeichen folgt eine negative Zahl, und die negative Zahl stellt die letzte Zahl des Elements dar

Ausführen historischer Befehle nach Schlüsselwort

!Sie können Befehle basierend auf Schlüsselwörtern ausführen.

Führen Sie den vorherigen Befehl aus, beginnend mit dem Schlüsselwort

Führen Sie beispielsweise den vorherigen Suchbefehl aus:

$ !find #Führen Sie den vorherigen Befehl aus, beginnend mit find

Führen Sie den vorherigen Befehl mit dem Schlüsselwort aus

Führen Sie für ein weiteres Beispiel den vorherigen Befehl mit dem Namen aus:

$ finde ./ -name "test"
./prüfen
./finden/testen
$ !?Name?
finde ./ -name "test"
./prüfen
./finden/testen

Ersetzen Sie die Parameter des vorherigen Befehls

Zum Beispiel:

$ find ./ -name "alt*" -a -name "*.zip"

Wenn wir in diesem Befehl „alt“ durch „neu“ ersetzen müssen:

$ !!:gs/alt/neu

Die Rolle der logischen Negation

Dies ist die bekannteste Funktion, um beispielsweise alle Dateien außer denen mit der Endung cfg zu löschen:

rm !(*.cfg) # Vorsicht beim Löschen

Auf die Einzelheiten werde ich hier nicht näher eingehen.

Zusammenfassen

Die Wirkung des Ausrufezeichens „!“ ist manchmal tatsächlich verblüffend. Es wurde vielleicht gerade schon einmal erwähnt! In Kombination mit anderen Zeichen, um eine bestimmte Verwendung einer bestimmten Bedeutung darzustellen, können wir tatsächlich kombinieren oder erweitern, um noch mehr wunderbare Verwendungsmöglichkeiten zu entdecken. Darauf wird hier nicht näher eingegangen. Welche anderen guten Entdeckungen haben Sie gemacht? Hinterlassen Sie gerne eine Nachricht!

Nun, das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Autor dieses Artikels: Sehen Sie sich diesen Artikellink an: https://www.yanbinghu.com/2018/12/22/40915.html
Copyright-Erklärung: Bei diesem Artikel handelt es sich um einen Originalartikel. Das Copyright liegt bei Shouwang und er unterliegt der Lizenzvereinbarung CC BY-NC-SA 3.0. Bei Nachdruck bitte bei mir melden!

Das könnte Sie auch interessieren:
  • Zusammenfassung zur Verwendung des Ausrufezeichen-Befehls (!) unter Linux

<<:  Tiefgreifendes Verständnis der Kernprinzipien von React Native (Bridge of React Native)

>>:  Mysql 5.6 fügt eine Methode zum Ändern von Benutzername und Passwort hinzu

Artikel empfehlen

Detaillierte Erläuterung der bidirektionalen Docker-Netzwerkverbindung

Docker-Netzwerk anzeigen Docker-Netzwerk ls [root...

Verwendung des Linux-Befehls ls

1. Einleitung Der Befehl ls dient zum Anzeigen de...

Implementierung von zwei Basis-Images für die Docker-Bereitstellung von Go

1. golang:neuestes Basis-Image mkdir gotest Berüh...

So verwenden Sie Homebrew unter Linux richtig

Viele Leute verwenden Linux Homebrew. Hier sind d...

Einfaches MySQL-Beispiel zum Sortieren chinesischer Schriftzeichen nach Pinyin

Wenn das Feld, in dem der Name gespeichert ist, d...

Reagiert auf verschiedene Arten, Parameter zu übergeben

Inhaltsverzeichnis Übergeben von Parametern zwisc...

Natives JS zum Implementieren der Seitenleiste zum Teilen

Dieser Artikel zeigt eine mit nativem JS implemen...

Detaillierte Erklärung der MySQL-Binlog-Verwendung

binlog ist eine binäre Protokolldatei, die alle D...

Vue.js implementiert eine Timeline-Funktion

In diesem Artikel wird der spezifische Code von V...