Emessa questãohá um comentário que diz:
Tudo isso por não entender o que significa "na localidade POSIX". (-: Você realmente deveria tentar combinar letras minúsculas gregas com (digamos) sed e [[:lower:]] e um prático conjunto de localidade el_GR.UTF-8. – JdeBP
Então: o que significa "na localidade POSIX"?
Bônus: isso é válido no POSIX em localidades diferentes de C?
LC_ALL=C grep '[[:lower:]]' file
Responder1
Quando POSIX diz (para “superior”)
Na localidade POSIX, apenas:
a B C D e F G H I J K L M N o p q R S T U V W x y Z
serão incluídos:
está definindo a localidade POSIX. Isso significa que no contexto do código de idioma POSIX, a classe de caracteres “superior” consiste apenas nos caracteres listados.
O POSIX não define nenhuma outra localidade, mas os sistemas são livres para fazê-lo. Como resultado, você não pode confiar em grep '[[:lower:]]' file
fazer algo útil em um local diferente do POSIX, se você se limitar apenas ao POSIX. Entretanto, muitos sistemas definem outras localidades e suas classes de caracteres. Por exemplo, em um sistema que usa as localidades da biblioteca GNU C,
$ echo 'α' | LC_ALL=el_GR.UTF-8 grep '[[:lower:]]'
α
(Isso pressupõe que o el_GR.UTF-8
código do idioma esteja disponível; em derivados do Debian, uma maneira rápida de garantir isso é instalar o locales-all
pacote.)
Responder2
Não entendi totalmente sua sugestão (na outra pergunta). No entanto, parece que você interpretou mal o caso de uso dolocalidade POSIX.
Sua sugestão parece ser que o local não é muitodo utilizadoramigável. E que deveria ser ajustado para que assim fosse. No entantodo utilizadoramigável não é o objetivo do posix local, esse é o trabalho de outros locais com outras regras.
O trabalho do posix local é ser previsível. Na verdade, também se beneficia por ser simples. Depois que você começa a incluir outras linguagens em um padrão, é muito difícil parar, e o resultado é um padrão que precisa de muita manutenção e é difícil de implementar.
Não há como eu, como desenvolvedor, conhecer todas as regras sobre cada idioma, como classificá-las em ordem "alfabética" e realmente saber quais são maiúsculas ou minúsculas. As regras para idiomas diferentes do inglês podem ser realmente muito complexas. Portanto, se você ajustar o Posix local para incluir as regras para todos os outros idiomas, seu comportamento será realmente muito imprevisível.
Mudanças na localidade posix poderiam de fato prejudicar o software onde os sistemas mais antigos não correspondiam ao comportamento dos sistemas mais novos. (Veja anedota abaixo)
Anedota
Um dos bugs mais obscuros e difíceis de diagnosticar que já vi foi em umFerramenta ETL"aleatoriamente" descartando linhas. Após uma análise meticulosa, descobriu-se que o software funcionou bem, mas apenas se executado com LC_COLLATE=C. Isso acontecia porque, ao combinar registros, ele dependia da ordem de classificação de um banco de dados que correspondia à sua própria ordem de classificação interna. Os desenvolvedores simplesmente nunca perceberam que em algumas localidades os números classificavam o texto em ordem alfabética "0, -1, 1, -2, 2" em vez de "-1, -2, 1, 2".
Para além da interacção do utilizador, o que isto mostra é uma necessidade genuína de os sistemas se comportarem de uma forma previsível que possa ser comum a todos os sistemas.