Bash * corrisponde ai file in ordine alfanumerico?


25

Voglio concatenare un gruppo di file insieme in ordine di nome file.

È sicuro supporre che questo mi dia in ordine alfanumerico?

cat * 

cioè lo stesso ordine che lsdà.

Risposte:


26

Risposta breve: Sì lo farà.

Dalla pagina man di bash :

Dopo la suddivisione delle parole, a meno che non sia stata impostata l'opzione -f (vedi The Set Builtin), Bash analizza ogni parola per i caratteri '*', '?' E '['. Se viene visualizzato uno di questi caratteri, la parola viene considerata come un motivo e sostituita con un elenco in ordine alfabetico di nomi di file corrispondenti al motivo.


6
Nota che "alfabetico" varia a seconda delle impostazioni locali (in particolare $LC_COLLATE).
Grawity

4
@grawity true, ma si tradurrebbe nello stesso output lsdello stesso sistema.
BloodPhilia,

8

La risposta breve è sì, ma devi essere consapevole di ciò che pensa dovrebbe essere l'ordine alfanumerico, poiché potrebbe non corrispondere all'ordine naturale che hai in mente.

Ad esempio, esegui alcuni test su come vengono gestite le lettere maiuscole e minuscole per scoprirlo sul tuo sistema, così come le sequenze di numeri.

Un problema comune che ho riscontrato nell'ordinare elenchi di file restituiti da un glob sono i file numerati. Mi vengono spesso dati file numerati come:

blah_1.txt
blah_2.txt
...
blah_10.txt
blah_11.txt

Tuttavia, un glob che usa il *non li restituirà in questo ordine, invece otterrai qualcosa del tipo:

blah_1.txt
blah_10.txt
blah_11.txt
...
blah_2.txt
blah_20.txt
...

Quindi - per evitare questo problema si sia bisogno di fare un po 'di manipolazione sulla lista restituita di file, o rinominare i files in modo che una sola cifra hai zero (vale a dire blah_01.txt, blah_02.txte così via).

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.