쉘 변경 사항이 있는지 또는 작동 방식을 알아보기 위해 도움을 찾고 있습니다. 우리는 ksh를 사용합니다.
하루 동안 명령을 실행했지만 몇 주 후에 동일한 명령이 실제 빼기 값을 반환했습니다 a=12,345,789; b=200; echo $(($a-$b))
.589
12345589
감사해요
답변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는 로케일에 따라 숫자를 해석하지 않는 것 같으므로 쉼표는 항상 쉼표 연산자로 해석됩니다.