
Ich möchte alle lokalspezifischen Unterschiede in Shell-Skripten deaktivieren. Was ist die bevorzugte Vorgehensweise?
LANG=C
oderLC_ALL=C
Antwort1
LANG
legt das Standardgebietsschema fest,dhdas Gebietsschema, das verwendet wird, wenn keine spezifischere Einstellung ( , LC_COLLATE
usw. ) angegeben ist; es überschreibt keine Einstellung, sondern stellt den Basiswert bereit. Andererseits überschreibt es alle Gebietsschemaeinstellungen.LC_NUMERIC
LC_TIME
LC_ALL
Um die Skripteinstellungen zu überschreiben, sollten Sie daher Folgendes festlegen LC_ALL
.
Sie können die Auswirkungen Ihrer Einstellungen überprüfen, indem Sie ausführen locale
. Es zeigt dieberechnetWerte in Anführungszeichen für alle Gebietsschemakategorien, die nicht explizit festgelegt sind; in Ihrem Beispiel LANG
überschreibt nicht LC_NUMERIC
, sondern stellt den Standardwert bereit. Wenn LC_ALL
und LC_NUMERIC
nicht in der Umgebung festgelegt sind, wird das Gebietsschema von übernommen LANG
und locale
dieser Wert für angezeigt LC_NUMERIC
, wie durch die Anführungszeichen angegeben.
Sehendie locales
ManpageUnddie POSIX-Definitionen von Umgebungsvariablenfür Einzelheiten. Siehe auchWie funktioniert das Programm „Locale“?
Antwort2
LANG
überschreibt nicht:
$ export LC_NUMERIC="de_DE.UTF-8" $ export LANG=C $ printf "%.2f\n" 3.14 -bash: printf: 3.14: ungültige Zahl 3,00
Aber LC_ALL
:
$ export LC_NUMERIC="de_DE.UTF-8" $ export LC_ALL=C $ printf "%.2f\n" 3.14 3.14