¿Qué significa "en la configuración regional POSIX"?

¿Qué significa "en la configuración regional POSIX"?

Enesta preguntahay un comentario que dice:

Todo esto por no entender lo que significa "en la configuración regional POSIX". (-: Realmente deberías intentar hacer coincidir las letras minúsculas griegas con (digamos) sed y [[:lower:]] y un práctico conjunto de configuración regional el_GR.UTF-8. – JdeBP

Entonces: ¿Qué significa "en la configuración regional POSIX"?

Bonificación: ¿es esto válido en POSIX en configuraciones regionales distintas de C?

LC_ALL=C grep '[[:lower:]]' file

Respuesta1

Cuando POSIX dice (para "superior")

En la configuración regional POSIX, sólo:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

se incluirá:

está definiendo la configuración regional POSIX. Significa que en el contexto de la configuración regional POSIX, la clase de carácter "superior" consta únicamente de los caracteres enumerados.

POSIX no define ninguna otra configuración regional, pero los sistemas son libres de hacerlo. Como resultado, no puede confiar en grep '[[:lower:]]' filehacer nada útil en una configuración regional que no sea POSIX, si se limita únicamente a POSIX. Sin embargo, muchos sistemas definen otras configuraciones regionales y sus clases de caracteres. Por ejemplo, en un sistema que utiliza las configuraciones regionales de la biblioteca GNU C,

$ echo 'α' | LC_ALL=el_GR.UTF-8 grep '[[:lower:]]'
α

(Esto supone que la el_GR.UTF-8configuración regional está disponible; en los derivados de Debian, una forma rápida de garantizarlo es instalar el locales-allpaquete).

Respuesta2

No he entendido completamente tu sugerencia (en la otra pregunta). Sin embargo, parece que ha malinterpretado el caso de uso delConfiguración regional POSIX.

Su sugerencia parece ser que la ubicación no es muyusuarioamigable. Y que debería ajustarse para que así sea. Sin embargousuarioamigable no es el objetivo del posix local, ese es el trabajo de otras configuraciones regionales con otras reglas.

El trabajo del posix local es ser predecible. De hecho, también se beneficia de ser simple. Una vez que empiezas a incluir otros lenguajes en un estándar, es muy difícil detenerlo y el resultado es un estándar que necesita mucho mantenimiento y es difícil de implementar.

No hay manera de que yo, como desarrollador, conozca todas las reglas de cada idioma, cómo ordenarlas en orden "alfabético" y, de hecho, sepa cuáles son mayúsculas o minúsculas. Las reglas para idiomas distintos del inglés pueden ser realmente muy complejas. Entonces, si ajusta el local de Posix para incluir las reglas para todos los demás idiomas, su comportamiento será realmente muy impredecible.

De hecho, los cambios en la configuración regional posix podrían perjudicar el software cuando los sistemas más antiguos no coincidieran con el comportamiento de los sistemas más nuevos. (Ver anécdota a continuación)


Anécdota

Uno de los errores más oscuros y difíciles de diagnosticar que he visto en mi vida fue en unherramienta ETLeliminando filas "al azar". Después de un análisis minucioso, resultó que el software funcionaba bien, pero sólo si se ejecutaba con LC_COLLATE=C. Esto se debía a que, al comparar registros, se basaba en el orden de clasificación de una base de datos que coincidía con su propio orden de clasificación interno. Los desarrolladores simplemente nunca se habían dado cuenta de que en algunas regiones los números ordenaban el texto alfabéticamente "0, -1, 1, -2, 2" en lugar de "-1, -2, 1, 2".

Más allá de la interacción del usuario, lo que esto muestra es una necesidad genuina de que los sistemas se comporten de una manera predecible que pueda ser común a todos los sistemas.

información relacionada