#1 Le 28/03/2012, à 13:09
- jmboultx
[Résolu] Distinction entre majuscules et minuscules
Bonjour,
Je tape les commandes suivantes dans le terminal. Je ne suis pas root, et le dossier par défaut est /etc. Le système est Ubuntu 11.10.
ls -d a*
J'obtiens comme prévu la liste des fichiers dont le nom commence par "a"
ls -d A*
J'obtiens la liste des fichiers dont le nom commence par un A majuscule (en l'occurrence, aucun). Juste pour confirmer que Linux fait bien la différence entre a et A.
ls -d [a]*
Même résultat que ls -d a*. Normal.
ls -d [A]*
Même résultat que ls -d A*. On a toujours bien la distinction de la casse.
ls -d [a-e]*
J'obtiens bien la liste des fichiers dont le nom commence par une lettre en minuscule comprise entre a et e. Normal.
ls -d [A-E]*
Même résultat que la commande précédente, alors que je m'attends à une liste vide, vu qu'aucun fichier ne commence par une majuscule.
Ma question est donc la suivante : pourquoi n'y a-t-il pas de différence entre [a-e] et [A-E] alors qu'il y en a une entre a et A dans les deux premières commandes ?
Merci d'avance.
Dernière modification par jmboultx (Le 28/03/2012, à 16:49)
Hors ligne
#2 Le 28/03/2012, à 13:41
- Postmortem
Re : [Résolu] Distinction entre majuscules et minuscules
Salut,
C'est parce que [A-E] prend les lettres entre A et E.
Et le classement est ainsi fait :
AaBbCcDd..... Ou comme ça : aAbBcCdD....
Le résultat est donc normal.
Si tu veux que ta commande fonctionne comme tu l'attends :
( LC_ALL=C; ls -ld [A-E]* )
La commande est entre parenthèse, comme ça LC_ALL retrouve sa valeur par défaut après.
Edit :
Plutôt faire ainsi ; comme cela, on ne génère pas de sous-processus (avec les parenthèses) et la variable LC_COLLATE retrouve sa valeur d'origine après la commande ls :
LC_COLLATE=C ls -ld [A-D]*
En fait ça c'est pas bon ! (voir post de pingouinux juste en dessous)
Re-edit :
[...] Matches any one of the enclosed characters. A pair of characters separated by a hyphen denotes a range expression; any character that sorts between those two characters, inclusive, using the current locale's collating sequence and character set, is matched. If the first character following the [ is a ! or a ^ then any character not enclosed is matched. The sorting order of characters in range expressions is determined by the current locale and the value of the LC_COLLATE shell variable, if set.
Dernière modification par Postmortem (Le 28/03/2012, à 14:50)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#3 Le 28/03/2012, à 14:17
- pingouinux
Re : [Résolu] Distinction entre majuscules et minuscules
Bonjour Postmortem,
Avec la seconde forme de ta commande du message #2, l'expansion des noms de fichiers semble avoir lieu avant que la variable LC_ALL soit prise en compte :
$ (LC_ALL=C; ls -l [A-C]*)
ls: cannot access [A-C]*: No such file or directory
$ LC_ALL=C ls -l [A-C]*
-rw-r--r-- 1 user user 141317 Mar 28 09:23 boul1.mbox
-rw-r--r-- 1 user user 141807 Mar 28 09:22 boul2.mbox
Hors ligne
#4 Le 28/03/2012, à 14:48
- Postmortem
Re : [Résolu] Distinction entre majuscules et minuscules
Salut pingouinux,
Ah oui, t'as raison.
J'ai du modifier la variable involontairement en testant tout à l'heure.
Je mets à jour mon post précédent, merki !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 28/03/2012, à 16:45
- jmboultx
Re : [Résolu] Distinction entre majuscules et minuscules
Merci à Postmortem et à pingouinix pour leur réponse rapide et satisfaisante.
Hors ligne
#6 Le 28/03/2012, à 20:37
- Postmortem
Re : [Résolu] Distinction entre majuscules et minuscules
De rien !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne