Qual é a diferença entre LANG=C e LC_ALL=C?

Qual é a diferença entre LANG=C e LC_ALL=C?

Gosto de desabilitar todas as diferenças específicas de localidade em scripts de shell. Qual é a maneira preferida de fazer isso?

LANG=CouLC_ALL=C

Responder1

LANGdefine a localidade padrão,ou sejao código do idioma usado quando nenhuma configuração mais específica ( LC_COLLATE, LC_NUMERIC, LC_TIMEetc.) é fornecida; não substitui nenhuma configuração, fornece o valor base. LC_ALLpor outro lado, substitui todas as configurações de localidade.

Assim, para substituir as configurações dos scripts, você deve definir LC_ALL.

Você pode verificar os efeitos de suas configurações executando locale. Ele mostra ocalculadovalores, entre aspas, para todas as categorias de localidade que não estão explicitamente definidas; no seu exemplo, LANGnão está substituindo LC_NUMERIC, está fornecendo o valor padrão. Se LC_ALLe LC_NUMERICnão estiverem definidos no ambiente, a localidade será obtida de LANGe localemostrará esse valor para LC_NUMERIC, conforme indicado pelas aspas.

Vera localespágina de manualeas definições POSIX de variáveis ​​de ambientepara detalhes. Veja tambémComo funciona o programa "localidade"?

Responder2

LANGnão substitui:

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

Mas LC_ALLfaz:

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

informação relacionada