seq 소수 구분 기호

seq 소수 구분 기호

부동 소수점과 함께 명령을 사용하면 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

관련 정보