나는 쉘 스크립트에서 모든 로케일별 차이점을 비활성화하고 싶습니다. 선호되는 방법은 무엇입니까?
LANG=C
또는LC_ALL=C
답변1
LANG
기본 로케일을 설정하고,즉더 이상 특정 설정( , 등)이 제공되지 않을 LC_COLLATE
때 사용되는 로케일입니다 . 이는 어떤 설정도 재정의하지 않으며 기본 값을 제공합니다. 반면에 모든 로케일을 재정의합니다.LC_NUMERIC
LC_TIME
LC_ALL
따라서 스크립트 설정을 재정의하려면 를 설정해야 합니다 LC_ALL
.
를 실행하여 설정의 효과를 확인할 수 있습니다 locale
. 이것은 보여준다계획된예제에서 명시적으로 설정되지 않은 모든 로케일 범주에 대한 값(따옴표)은 LANG
재정의하는 대신 LC_NUMERIC
기본값이 제공됩니다. 환경에 LC_ALL
및 가 설정되지 않은 경우 LC_NUMERIC
로케일은 따옴표로 표시된 대로 LANG
및 locale
표시된 값 에서 가져옵니다.LC_NUMERIC
바라보다locales
맨페이지그리고환경 변수의 POSIX 정의더 알아보기. 당신은 또한 볼 수 있습니다지역 설정 프로그램은 어떻게 작동하나요?
답변2
LANG
보장되지 않는 것:
$ 내보내기 LC_NUMERIC="de_DE.UTF-8" $ 내보내기 LANG=C $ printf "%.2f\n" 3.14 -bash: printf: 3.14: 잘못된 숫자 3,00
그러나 LC_ALL
실제로는:
$ 내보내기 LC_NUMERIC="de_DE.UTF-8" $ 내보내기 LC_ALL=C $ printf "%.2f\n" 3.14 3.14