
부동 소수점과 함께 명령을 사용하면 seq
입력에 점을 사용했음에도 불구하고 출력에 소수 구분 기호로 점 대신 쉼표가 표시됩니다.
seq 0.1 0.3 1.3
0,1
0,4
0,7
1,0
1,3
LC_NUMERIC
나는 이것이 로케일이 설정된 로케일에 연결되어 있다고 생각했지만 로 de_DE.UTF-8
변경해도 문제가 en_US.UTF-8
해결되지 않았고 포인트를 반환하는 정확히 동일한 로케일을 가진 다른 시스템이 있습니다. 예를 들어 형식이 명시적으로 정의된 경우에도 -f %1.2
점은 반환되지 않지만 소수 구분 기호로 쉼표가 반환됩니다.
이 동작을 어디서 어떻게 변경할 수 있나요? 특정 시스템에서 내 스크립트에 오류가 발생하지 않도록 하려면 어떻게 해야 합니까? 분명히 모든 출력은 tr
유사한 방식으로 재처리 되지 않으면 추가 처리에 사용할 수 없습니다 .
Mint는 독일 시간대의 영어로 설치되고 다른 시스템에서는 Raspian이 설치됩니다.
편집: locale
특정 컴퓨터의 설정:
"쉼표" 하나:
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
"포인트" 하나:
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="C.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
설정은 LANGUAGE
결과에 영향을 주지 않습니다.
답변1
로케일 자체의 오류를 배제하기 위해 (다시) 생성 de_DE.UTF-8
하고 en_US.UTF-8
통과했습니다.
dpkg-reconfigure locales
이제 seq
행동은 다음에 달려있는 것 같습니다.LC_NUMERIC
그리고 LANG
.
LC_NUMERIC
설정되지 않은 경우/null 인 경우 LANG
동작을 정의하고 , 그렇지 않은 경우 각각 LC_NUMERIC
쉼표와 점 사이를 전환합니다 de_DE.UTF-8
.en_US.UTF-8
특정 위험
LANG
포인트 기반이 아닌 에 대해 잘못된/존재하지 않는 값을 설정하는 경우 locale
특수한 경우에 동작이 혼합될 수 있습니다.
LANG=en_US
#it should be en_US.UTF-8
LC_NUMERIC=de_DE.UTF-8
seq 0.1 0.2 1.3
0.1
0.3
0.5
0.7
0.9
1.1
1,3
그것은 나타날 뿐만 아니라 seq 0.1 0.2 1.4
매우 seq 0.1 0.2 1.9
이상하고 IMHO 매우 위험한 행동이기도 합니다. 따라서 seq
모든 스크립트나 정의된 로케일의 이식성 에 유의하시기 바랍니다 .
대략적으로 추측하자면 이는 특정 사례의 일부 수동 변경과 관련이 있는 것 같습니다(참조:https://lists.gnu.org/archive/html/bug-coreutils/2008-09/msg00192.html)
고쳐 쓰다:
지역화된 출력 형식으로 인한 오류를 방지하려면 관리자는 스크립트 자체에서 로케일()을 정의할 것을 권장합니다 LC_NUMERIC=C
. 이 동작을 변경할 계획은 없습니다. (패치와 함께 아래 링크된 스레드 참조)
잘못된 로케일 설정으로 인해 점과 쉼표가 혼합되어 출력되는 문제는 버그로 식별되어 관리자에 의해 패치되었습니다.
https://lists.gnu.org/archive/html/coreutils/2019-02/msg00002.html