Cosa significa il punto interrogativo nel comando terminale?


Risposte:


15

Quelli si chiamano Wildcard (modelli globbing)

I caratteri jolly standard (noti anche come modelli globbing) vengono utilizzati da varie utilità della riga di comando per lavorare con più file.
I caratteri jolly standard sono utilizzati da quasi tutti i comandi (inclusi mv, cp, rm e molti altri).

  • (question mark)

    questo può rappresentare qualsiasi singolo personaggio. Se hai specificato qualcosa nella riga di comando come "hd?" GNU / Linux cercherebbe hda, hdb, hdc e ogni altra lettera / numero tra az, 0-9.

  • *(asterisk)

    questo può rappresentare qualsiasi numero di caratteri (incluso zero, in altre parole, zero o più caratteri). Se si specifica un "cd *", si utilizzerà "cda", "cdrom", "cdrecord" e tutto ciò che inizia con "cd", incluso "cd" stesso. "m * l" potrebbe essere macinato, smussato, ml e tutto ciò che inizia con una m e termina con una l.

  • [ ] (square brackets)

    specifica un intervallo. Se hai fatto m [a, o, u] m può diventare: mam, mamma, mamma se lo facessi: m [ad] m può diventare tutto ciò che inizia e termina con me che ha un carattere da a a d in mezzo. Ad esempio, funzionerebbero: mam, mbm, mcm, mdm. Questo tipo di carattere jolly specifica una relazione "o" (è necessario solo uno per abbinare).

  • { } (curly brackets)

    i termini sono separati da virgole e ogni termine deve essere il nome di qualcosa o un carattere jolly. Questo carattere jolly copierà tutto ciò che corrisponde a un carattere jolly o ai nomi esatti (una relazione "o", l'uno o l'altro).


Ad esempio, questo sarebbe valido:

  • cp { .doc, .pdf} ~

    Questo copierà tutto ciò che termina con .doc o .pdf nella home directory degli utenti. Si noti che gli spazi non sono consentiti dopo le virgole (o altrove).

  • [!]

    Questo costrutto è simile al costrutto [], tranne che per far corrispondere qualsiasi carattere tra parentesi, corrisponderà a qualsiasi carattere, purché non sia elencato tra [e]. Questo è un NOT logico. Ad esempio rm myfile [! 9] rimuoverà tutti i myfile * (es. Myfiles1, myfiles2 ecc.) Ma non rimuoverà un file con il numero 9 ovunque nel suo nome.

  • \ (backslash)

    viene usato come carattere di "fuga", cioè per proteggere un carattere speciale successivo. Pertanto, "\" cerca una barra rovesciata. Nota potrebbe essere necessario utilizzare le virgolette e le barre rovesciate.

per altri esempi: visita questa pagina


3
Vale la pena ricordare che apt-get removerichiede nomi di pacchetti , non nomi di file, il che rende l'espansione di caratteri jolly da parte della shell in gran parte inutile. Se si desidera rimuovere una gamma di pacchetti, è necessario utilizzare un'espressione regolare completa, quotata in modo appropriato per impedire alla shell di provare a interpretarla come glob (ad es apt-get remove 'gnome.*'.).

4
Standard wildcards are used by nearly any command (including mv, cp, rm and many others).=> FALSO. questi caratteri jolly vengono espansi dalla shell e ciò che il comando riceve è il risultato dell'espansione (ovvero i file che corrispondono al modello) anziché al modello. (se non ci sono file che corrispondono al modello, quel modello verrà passato direttamente al comando)
Carlos Campderrós

17

In generale, in Bash, a ?è un modello glob che si espande in un carattere arbitrario.

Per esempio:

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

È simile a a *, ma a si *espande a 0 o più caratteri, mentre a si ?espande esattamente a un carattere (arbitrario).

Nel tuo caso speciale, ?apparentemente il comando era un errore di battitura.


Quindi è inutile / inutile nel mio caso, giusto?
Ooker

Sì. In realtà è stato modificato in base alla risposta a cui ti sei collegato quando hai posto la tua domanda. :)
Malte Skoruppa

1
Non ci posso credere: -o
Ooker

1
Anche se fossero caratteri jolly corretti, questo uso dovrebbe essere evitato senza virgolette. apt-get capire REs, ma se gnome1esiste un file chiamato nella directory corrente, la shell lo espanderà prima che apt-get abbia qualche possibilità di vederlo.
Rmano,

@Ooker Non lo dimenticherai mai adesso!
cameraman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.