De acordo com a% man_de% manpage, a variável de ambiente bash
afeta os intervalos de caracteres, exatamente como a resposta de Hauke Laging:
LC_COLLATE This variable determines the collation order used when sorting the results of pathname expansion, and determines the behavior of range expressions, equivalence classes, and collating sequences within pathname expansion and pattern matching.
Por outro lado, LC_COLLATE
afeta as classes de caracteres:
LC_CTYPE This variable determines the interpretation of characters and the behavior of character classes within pathname expansion and pattern matching.
O que isto significa é que ambos casos são potencialmente problemáticos se você estiver pensando em um contexto em inglês, da esquerda para a direita, alfabeto latino, dígito árabe.
Se você for realmente adequado e / ou estiver criando scripts para um ambiente com várias localidades, provavelmente será melhor confirmar quais são suas variáveis de localidade ao corresponder arquivos ou ter certeza de que está codificando de uma forma completamente genérica.
É muito difícil prever algumas situações, a menos que você tenha estudado lingüística.
No entanto, eu não sei de uma localidade que usa latim que mude a ordem de letras, então [a-z] funcionaria. Existem extensões para o alfabeto latino que agrupam ligaduras e diacríticos de maneira diferente. No entanto, aqui está um pequeno experimento:
<!-- language: lang-bash -->
mkdir /tmp/test
cd /tmp/test
export LC_CTYPE=de_DE.UTF-8
export LC_COLLATE=de_DE.UTF-8
touch Grüßen
ls G* # This says ‘Grüßen’
ls *[a-z]en # This says nothing!
ls *[a-zß]en # This says ‘Grüßen’
ls Gr[a-z]*en # This says nothing!
Isso é interessante: pelo menos para o alemão, nem diacríticos como ü nem ligaduras como ß são dobrados em caracteres latinos. (ou isso, ou eu estraguei a mudança do local!)
Isso pode ser ruim para você, é claro, se você estiver tentando encontrar nomes de arquivos que começam com uma letra, use LC_CTYPE
e aplique-a em um arquivo que comece com "Ä".