
Gosto de desabilitar todas as diferenças específicas de localidade em scripts de shell. Qual é a maneira preferida de fazer isso?
LANG=C
ouLC_ALL=C
Responder1
LANG
define a localidade padrão,ou sejao código do idioma usado quando nenhuma configuração mais específica ( LC_COLLATE
, LC_NUMERIC
, LC_TIME
etc.) é fornecida; não substitui nenhuma configuração, fornece o valor base. LC_ALL
por 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, LANG
não está substituindo LC_NUMERIC
, está fornecendo o valor padrão. Se LC_ALL
e LC_NUMERIC
não estiverem definidos no ambiente, a localidade será obtida de LANG
e locale
mostrará esse valor para LC_NUMERIC
, conforme indicado pelas aspas.
Vera locales
página de manualeas definições POSIX de variáveis de ambientepara detalhes. Veja tambémComo funciona o programa "localidade"?
Responder2
LANG
nã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_ALL
faz:
$ exportar LC_NUMERIC="de_DE.UTF-8" $ exportar LC_ALL=C $ printf "%.2f\n" 3.14 3.14