Ceci est une question de devoirs:
Faites correspondre tous les noms de fichiers avec 2 caractères ou plus qui commencent par une lettre minuscule, mais ne se terminent pas par une lettre majuscule.
Je ne comprends pas pourquoi ma solution ne fonctionne pas.
J'ai donc exécuté ce qui suit:
touch aa
touch ha
touch ah
touch hh
touch a123e
touch hX
touch Ax
ls [a-z]*[!A-Z]
Production:
aa ha
Ma question: pourquoi ne correspond-elle pas à "ah", "hh" ou "a123e"?
mksh
shell, mais pasbash --posix
, donc il doit y avoir une règle spécifique pour bash`mksh
commezsh
l »[A-Z]
ne correspond pasÉ
par exemple. Les[A-Z]
matchs de ksh93 sont activésÉ
mais pas activésh
.Réponses:
Il s'agit d'un problème de localisation . Dans votre environnement local, se
[A-Z]
développe en quelque chose comme[AbBcZ...zZ]
(plus probablement d'autres comme des caractères accentués),[^A-Z]
signifie donc en fait "fichiers qui se terminent para
" dans votre exemple (et uniquement dans votre exemple).Si vous voulez éviter une telle surprise, une façon consiste à définir
LC_COLLATE=C
car le classement est la partie de vos paramètres régionaux qui est responsable de l'ordre de tri. Aussi, videLC_ALL
s'il est défini, car il aurait la priorité.Ou, mieux, il est probablement préférable de ne pas modifier vos paramètres régionaux et d'utiliser les classes appropriées:
[:lower:]
au lieu de[a-z]
et[:upper:]
au lieu de[A-Z]
.Ou utilisez l'
globasciiranges
option de bash :la source
LC_ALL=C ls [a-z]*[^A-Z]
n'affecterait que lesls
paramètres régionaux de, pas les paramètres régionaux utilisés par le shell pour développer le glob ou analyser cette ligne de commande.LC_xxx
pour qu'il s'applique au glob, mais il serait préférable que ls ait les mêmes paramètres régionaux.test-鏏
par exemple, car une fois que vous changez le jeu de caractères en celui de l'environnement local C,鏏
devient<0xe7>A
. IOW, lorsque vous modifiez LC_CTYPE, vous obtenez différents caractères.é
,Á
(mais probablement pasŹ
). IOW, l'utilisation[A-Z]
n'a pas de sens en dehors des paramètres régionaux C.