Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 :

man bash (dans la partie Pattern Matching) a écrit :

[...]  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