Perché l'eco abbina due file due volte?


11
$ touch file{1..12}

$ echo *e{1..12}
file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

$ echo *{1..12}
file1 file11 file12 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

Non capisco perché questo stia accadendo. Per favore qualcuno può spiegare?

Risposte:


21

Le parentesi graffe non sono motivi jolly. Controlla la documentazione delle espansioni di bash : le parentesi graffe vengono espanse molto presto nel processo e i modelli di caratteri jolly vengono espansi nell'ultimo passaggio¹.

Inizialmente, il comando è costituito da due parole echo, *{1..12}. Dopo espansione delle parentesi graffe, il comando contiene 13 parole: echo, *1, *2, ..., *12. Quindi i modelli di caratteri jolly vengono espansi. *1si espande nell'elenco dei nomi di file che termina con 1, che include non solo file1ma anche file11(che viene ordinato in seguito in ordine lessicografico). Allo stesso modo si *2espande a file12e file2(in questo ordine). Così si ottiene echo, file1, file11, file12, file2, e poi gli altri caratteri jolly che ha trovato un singolo file: file3, file4, ..., file12.

¹ Accanto all'ultimo, se segui la descrizione del manuale, ma la "rimozione delle virgolette" non è una cosa reale: le virgolette vengono analizzate prima del processo di espansione.

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.