¿Cuál es la diferencia entre LANG=C y LC_ALL=C?

¿Cuál es la diferencia entre LANG=C y LC_ALL=C?

Me gusta desactivar todas las diferencias locales específicas en los scripts de shell. ¿Cuál es la forma preferida de hacerlo?

LANG=CoLC_ALL=C

Respuesta1

LANGestablece la configuración regional predeterminada,es decirla configuración regional utilizada cuando no se proporciona ninguna configuración más específica ( LC_COLLATE, LC_NUMERIC, etc.); LC_TIMEno anula ninguna configuración, proporciona el valor base. LC_ALLpor otro lado, anula todas las configuraciones regionales.

Por lo tanto, para anular la configuración de los scripts, debes configurar LC_ALL.

Puede comprobar los efectos de su configuración ejecutando locale. Muestra elcalculadovalores, entre comillas, para todas las categorías locales que no están establecidas explícitamente; en su ejemplo, LANGno se anula LC_NUMERIC, proporciona el valor predeterminado. Si LC_ALLy LC_NUMERICno están configurados en el entorno, la configuración regional se toma de LANGy localemuestra ese valor para LC_NUMERIC, como lo indican las comillas.

Verla localespágina de manualylas definiciones POSIX de variables de entornopara detalles. Ver también¿Cómo funciona el programa "local"?

Respuesta2

LANGno anula:

$ exportar LC_NUMERIC="de_DE.UTF-8"
$ exportar LANG=C
$ imprimirf "%.2f\n" 3.14
-bash: printf: 3.14: número no válido
3,00

Pero LC_ALLlo hace:

$ exportar LC_NUMERIC="de_DE.UTF-8"
$ exportar LC_ALL=C
$ imprimirf "%.2f\n" 3.14
3.14

información relacionada