Was bedeutet das Fragezeichen im Terminalbefehl?


Antworten:


15

Diese werden als Wildcards (Globbing Patterns) bezeichnet.

Standard-Platzhalter (auch als Globbing-Muster bezeichnet) werden von verschiedenen Befehlszeilenprogrammen verwendet, um mit mehreren Dateien zu arbeiten.
Standard-Platzhalter werden von fast jedem Befehl verwendet (einschließlich mv, cp, rm und vielen anderen).

  • (question mark)

    Dies kann jedes einzelne Zeichen darstellen. Wenn Sie in der Befehlszeile etwas wie "hd?" GNU / Linux würde nach hda, hdb, hdc und jedem anderen Buchstaben / jeder anderen Zahl zwischen az, 0-9 suchen.

  • *(asterisk)

    Dies kann eine beliebige Anzahl von Zeichen darstellen (einschließlich null, dh null oder mehr Zeichen). Wenn Sie eine "cd *" angeben, werden "cda", "cdrom", "cdrecord" und alles, was mit "cd" beginnt, einschließlich "cd" selbst verwendet. "m * l" könnte durch Mühle, Mull, ml und alles, was mit einem m beginnt und mit einem l endet.

  • [ ] (square brackets)

    Gibt einen Bereich an. Wenn Sie m [a, o, u] m getan haben, kann es werden: mam, mum, mom, wenn Sie m [ad] m getan haben, kann es alles werden, was mit m beginnt und endet und dazwischen ein beliebiges Zeichen a bis d hat. Zum Beispiel würden diese funktionieren: mam, mbm, mcm, mdm. Diese Art von Platzhalter gibt eine "oder" -Beziehung an (Sie benötigen nur eine übereinstimmende).

  • { } (curly brackets)

    Begriffe werden durch Kommas getrennt und jeder Begriff muss der Name von etwas oder einem Platzhalter sein. Dieser Platzhalter kopiert alles, was entweder mit Platzhaltern oder genauen Namen übereinstimmt (eine oder eine Beziehung, die eine oder die andere).


Dies wäre beispielsweise gültig:

  • cp { .doc, .pdf} ~

    Dadurch wird alles, was mit .doc oder .pdf endet, in das Home-Verzeichnis des Benutzers kopiert. Beachten Sie, dass Leerzeichen nach den Kommas (oder anderswo) nicht zulässig sind.

  • [!]

    Dieses Konstrukt ähnelt dem Konstrukt [], außer dass es nicht mit Zeichen in Klammern übereinstimmt, sondern mit jedem Zeichen, solange es nicht zwischen [und] aufgeführt ist. Dies ist ein logisches NICHT. Zum Beispiel entfernt rm myfile [! 9] alle myfiles * (dh myfiles1, myfiles2 usw.), entfernt jedoch keine Datei mit der Nummer 9 irgendwo innerhalb des Namens.

  • \ (backslash)

    wird als "Escape" -Zeichen verwendet, dh um ein nachfolgendes Sonderzeichen zu schützen. Daher sucht "\" nach einem Backslash. Beachten Sie, dass Sie möglicherweise Anführungszeichen und Backslash (s) verwenden müssen.

Weitere Beispiele: Besuchen Sie diese Seite


3
Es ist erwähnenswert, apt-get removedass Paketnamen und keine Dateinamen erforderlich sind , was die Wildcard-Erweiterung durch die Shell weitgehend unbrauchbar macht. Wenn Sie eine Reihe von Paketen entfernen möchten, müssen Sie einen vollständigen regulären Ausdruck verwenden, der entsprechend zitiert wird, um zu verhindern, dass die Shell versucht, ihn als Glob zu interpretieren (z apt-get remove 'gnome.*'. B. ).

4
Standard wildcards are used by nearly any command (including mv, cp, rm and many others).=> FALSE. Diese Platzhalter werden von der Shell erweitert, und der Befehl erhält das Ergebnis der Erweiterung (dh der Dateien, die dem Muster entsprechen) anstelle des Musters. (Wenn es keine Datei gibt, die dem Muster entspricht, wird dieses Muster jedoch direkt an den Befehl übergeben.)
Carlos Campderrós

17

Im Allgemeinen ist a in Bash ?ein Glob-Muster, das sich zu einem beliebigen Zeichen erweitert.

Beispielsweise:

$ echo Hello1 > foo1
$ echo Hello2 > foo2
$ cat foo?
Hello1
Hello2

Es ist ähnlich wie a *, aber a wird *auf 0 oder mehr Zeichen erweitert, während a ?auf genau ein (beliebiges) Zeichen erweitert wird.

In Ihrem speziellen Fall war das ?im Befehl anscheinend ein Tippfehler.


Also ist es in meinem Fall nutzlos / unnötig, oder?
Ooker

Ja. Tatsächlich wurde es aus der Antwort heraus bearbeitet, auf die Sie verlinkt haben, als Sie Ihre Frage gestellt haben. :)
Malte Skoruppa

1
Ich kann es nicht glauben: -o
Ooker

1
Selbst wenn es sich um korrekte Platzhalter handelte, sollte diese Verwendung ohne Anführungszeichen vermieden werden. apt-get REs verstehen, aber wenn eine aufgerufene Datei gnome1im aktuellen Verzeichnis vorhanden ist, wird sie von der Shell erweitert, bevor apt-get die Möglichkeit hat, sie zu sehen.
Rmano

@Ooker Du wirst es jetzt nie vergessen!
Kameradschaft
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.