LANG=C와 LC_ALL=C의 차이점은 무엇입니까?

LANG=C와 LC_ALL=C의 차이점은 무엇입니까?

나는 쉘 스크립트에서 모든 로케일별 차이점을 비활성화하고 싶습니다. 선호되는 방법은 무엇입니까?

LANG=C또는LC_ALL=C

답변1

LANG기본 로케일을 설정하고,더 이상 특정 설정( , 등)이 제공되지 않을 LC_COLLATE때 사용되는 로케일입니다 . 이는 어떤 설정도 재정의하지 않으며 기본 값을 제공합니다. 반면에 모든 로케일을 재정의합니다.LC_NUMERICLC_TIMELC_ALL

따라서 스크립트 설정을 재정의하려면 를 설정해야 합니다 LC_ALL.

를 실행하여 설정의 효과를 확인할 수 있습니다 locale. 이것은 보여준다계획된예제에서 명시적으로 설정되지 않은 모든 로케일 범주에 대한 값(따옴표)은 LANG재정의하는 대신 LC_NUMERIC기본값이 제공됩니다. 환경에 LC_ALL및 가 설정되지 않은 경우 LC_NUMERIC로케일은 따옴표로 표시된 대로 LANGlocale표시된 값 에서 가져옵니다.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

관련 정보