Was ist der Unterschied zwischen LANG=C und LC_ALL=C?

Was ist der Unterschied zwischen LANG=C und LC_ALL=C?

Ich möchte alle lokalspezifischen Unterschiede in Shell-Skripten deaktivieren. Was ist die bevorzugte Vorgehensweise?

LANG=CoderLC_ALL=C

Antwort1

LANGlegt das Standardgebietsschema fest,dhdas Gebietsschema, das verwendet wird, wenn keine spezifischere Einstellung ( , LC_COLLATEusw. ) angegeben ist; es überschreibt keine Einstellung, sondern stellt den Basiswert bereit. Andererseits überschreibt es alle Gebietsschemaeinstellungen.LC_NUMERICLC_TIMELC_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_ALLund LC_NUMERICnicht in der Umgebung festgelegt sind, wird das Gebietsschema von übernommen LANGund localedieser Wert für angezeigt LC_NUMERIC, wie durch die Anführungszeichen angegeben.

Sehendie localesManpageUnddie 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

verwandte Informationen