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.