쉼표로 구분된 숫자의 UNIX 빼기

쉼표로 구분된 숫자의 UNIX 빼기

쉘 변경 사항이 있는지 또는 작동 방식을 알아보기 위해 도움을 찾고 있습니다. 우리는 ksh를 사용합니다.

하루 동안 명령을 실행했지만 몇 주 후에 동일한 명령이 실제 빼기 값을 반환했습니다 a=12,345,789; b=200; echo $(($a-$b)).58912345589

감사해요

답변1

ksh의 해석은 12,345,789로케일에 따라 달라지는 것 같습니다.

$ LC_NUMERIC=C ksh -c 'a=12,345,789; b=200; echo $(($a-$b))'
589
$ LC_NUMERIC=en_US.UTF-8 ksh -c 'a=12,345,789; b=200; echo $(($a-$b))'
12345589

C 로케일에서는 쉼표 연산자 12, 345및 로 구분된 세 개의 숫자입니다. 이는 기본적으로 가장 오른쪽 값을 제외한 모든 값을 버립니다. 789분명히 en_US.UTF-8내 컴퓨터의 로케일에서는 쉼표가 천 단위 구분 기호 역할을 하므로 단일 숫자입니다 12345789.

반면 fi_FI.UTF-8에 입력된 로케일에 있으면 "ksh: 12,345,789-200: 산술 구문 오류" 오류가 발생하지만 쉼표를 제거하면 숫자가 이번에는 소수 구분 기호로 허용됩니다.

$ LC_NUMERIC=fi_FI.UTF-8 ksh -c 'a=12,345; b=200; echo $(($a - $b))'
-187,655

예를 들어 Bash는 로케일에 따라 숫자를 해석하지 않는 것 같으므로 쉼표는 항상 쉼표 연산자로 해석됩니다.

관련 정보