스크립트에서 로케일 변경

스크립트에서 로케일 변경

bc나는 수학을 사용하고 수행하는 스크립트를 만들었습니다 printf.

cygwinlocale is 에서는 잘 작동 하지만 en_US.UTF-8Linux(로케일)에서 실행하면 소수 구분 기호 en_ES.UTF-8로 사용되기 때문에 실패합니다 . ,예를 들어 다음 표현식은 실패합니다.

avg=$(printf %.2f $(echo "scale=4; $val1/$val2" | bc -l )) 

해결책을 찾았습니다. 스크립트 앞에 추가하십시오 LC_ALL=C.UTF8.

LC_ALL=C.UTF8 ./script.sh [OPTIONS] 

하지만, 내 생각에는 이런 일은 하지 않는 것이 가장 좋은 것 같다.
그래서 내 질문은: 사용자 프로필에 설정된 로케일에 관계없이 이와 같은 문제를 피하기 위해 스크립트 내부의 로케일만 변경할 수 있는 방법이 있습니까?

답변1

스크립트 내에서 export LC_ALL=C.UTF-8시작 부분에 1을 추가하기만 하면 됩니다(셔뱅 라인이 있는 경우 바로 다음).

그러면 스크립트에 의해 실행되는 모든 명령이 LC_ALL.

로케일 변경에 영향을 받지 않는 스크립트의 일부가 필요하지만 로케일을 존중하기 위한 스크립트의 일부가 필요한 경우(예를 들어 일부 값을 계산하고 인쇄하려는 경우) unset LC_ALL계산 후 이를 수행하고 싶을 수 있습니다. 인쇄하기 전에. 또는 명령별 설정으로 스크립트의 특정 명령에만 접두어를 붙이도록 선택할 수 있습니다.


  1. 일부 플랫폼에서는 C 로케일의 UTF-8 버전을 다르게 철자합니다(대소문자가 다르거나 하이픈이 누락됨 UTF-8). 보다 플랫폼 독립적인 버전은 다음과 같습니다.

     export LC_ALL=$(locale -a|grep -ix 'c.utf-\?8' || echo C)
    

관련 정보