Ordre des fichiers appariés par un glob


1

Supposons que j'ai les fichiers suivants dans un dossier

1.txt
2.txt
a.txt
b.txt
c.txt

Si je compare ces fichiers par un glob afin de les traiter, par exemple

for f in *;do echo $f;done

puis les Bashfera correspondre - selon la page de manuel - dans un ordre alphabétique.

Existe-t-il toutefois un standard POSIX définissant l'ordre de correspondance des globs? De cette façon, je pouvais compter sur un certain ordre de correspondance dans n'importe quel shell, à condition qu'il soit conforme à POSIX.

Réponses:


1

Oui, la commande est requise par POSIX. De la spécification POSIX :

Si le modèle correspond à un nom de fichier ou à un chemin existant, il doit être remplacé par le nom de fichier et le nom de chemin, triés en fonction de la séquence de classement en vigueur dans les paramètres régionaux en cours. [Soulignement ajouté]

Pour être sûr d'obtenir des résultats cohérents, vous devez spécifier des paramètres régionaux. Pour la programmation, le réglage LC_COLLATE=Cest un choix commun.


LC_ALL = C n'est pas un très bon choix, car tout le reste sera forcé en mode ASCII. Si vous ne voulez que l'ordre de classement, définissez plutôt LC_COLLATE.
Grawity

@grawity Oui, COLLATE, c'est mieux. Réponse mise à jour.
John1024
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.