J'aime désactiver toutes les différences spécifiques à la locale dans les scripts shell. Quel est le moyen préféré de le faire?
LANG=C
ou LC_ALL=C
LANG
définit les paramètres paramètres par défaut, I.E. Le local utilisé lorsqu'il n'est plus spécifique (LC_COLLATE
, LC_NUMERIC
, LC_TIME
etc.) est fourni; Il ne remplace aucun réglage, il fournit la valeur de base. LC_ALL
D'autre part remplace tous les paramètres locaux.
Ainsi, remplacer les paramètres des scripts, vous devez définir LC_ALL
.
Vous pouvez vérifier les effets de vos paramètres en exécutant locale
. Il montre les valeurs calculées, dans des guillemets, pour toutes les catégories locales qui ne sont pas explicitement définies; Dans votre exemple, LANG
ne remplace pas LC_NUMERIC
, il fournit la valeur par défaut. Si LC_ALL
et LC_NUMERIC
ne sont pas définis dans l'environnement, la locale est prise de LANG
et locale
montre que la valeur pour LC_NUMERIC
, comme indiqué par les citations.
Voir The locales
Manpage et les définitions de POSIX des variables d'environnement pour plus de détails. Voir aussi Comment fonctionne le programme "Locale"?
LANG
ne remplace pas:
$ export lc_numeric = "de_de.utf-8" [.____] $ export Lang = c [.____] $ printf "% .2f\n" 3.14 [. ____] - Bash: Printf : 3.14: Nombre non valide [.____] 3,00 [.____]
Mais LC_ALL
Est-ce que:
[.____] $ export lc_numeric = "de_de.utf-8" [.____] $ export lc_all = c [.____] $ printf "% .2f\n" 3.14 3.14