Forum Programmation.shell Crochets et Bash

Posté par  (site Web personnel) .
Étiquettes : aucune
0
15
sept.
2005
J'ai un gros problème d'un coup là : pourquoi diable Bash ne semble pas vouloir travailler correctement sur les crochets ?

Exemple :

$ touch a b c d e f g
$ touch A B C D E F G
$ ls [a-d]*
a A b B c C d


Pardon ?! Pourquoi les fichiers majuscules ? Et encore, s'ils étaient tous là ... (il manque "D"). C'est particulièrement étrange, puisque pdksh, par exemple, ne pose pas de problème ("a b c d").
Testé avec des Bash 2 et 3.

Si quelqu'un possède une explication, elle m'intéresse beaucoup !
  • # pb de locale

    Posté par  (site Web personnel) . Évalué à 10.

    Ca vient de ton LC_COLLATE (qui indique l'ordre alphabetique pour ta langue).
    [pterjan@plop tmp]$ export LC_COLLATE=C
    [pterjan@plop tmp]$ ls [a-d]
    a  b  c  d
    [pterjan@plop tmp]$ export LC_COLLATE=fr
    [pterjan@plop tmp]$ ls [a-d]
    a  A  b  B  c  C  d
    [pterjan@plop tmp]$
    [a-d] signifie les lettres entre 'a' et 'd', en francais (et dans d'autres locales) elles sont dans l'ordre suivant : AaBbCc... alors qu'en POSIX c'est ABCD...abcd...
    • [^] # Re: pb de locale

      Posté par  (site Web personnel) . Évalué à 2.

      Superbe. Merci. Extrait du man de Bash :
      Cette  variable  détermine  l'ordre  des lettres lors du tri des
      chemins ainsi que le comportement  des  expressions  des  inter-
      valles,  des  classes  d'équivalences,  et  de la comparaison de
      chaînes lors de la recherche de motifs et le  développement  des
      chemins.
      
    • [^] # Re: pb de locale

      Posté par  (site Web personnel) . Évalué à 4.

      elles sont dans l'ordre suivant : AaBbCcDd...

      Ce serait pas plutôt aAbBcCdD, parce que sinon ls [a-d]* afficherait aussi D non ?
    • [^] # Re: pb de locale

      Posté par  (site Web personnel) . Évalué à 1.

      Très Trés pointu monsieur Pascal, Félicitations !
  • # une piste

    Posté par  . Évalué à 1.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.