저는 우분투 20.0.4를 실행하고 있습니다.
다음 파일의 내용을 고려하십시오(파일 이름이 이라고 가정 input
)...
/zzzzz foo bar
/hij zzz
xyz abc
/abc
ijk lmnop
qwer tyuiop
abc def
실행하면 /bin/sort input
다음과 같은 결과가 나옵니다...
/abc
abc def
/hij zzz
ijk lmnop
qwer tyuiop
xyz abc
/zzzzz foo bar
보시다시피 정렬 알고리즘은 선행 슬래시를 완전히 무시합니다. sort
매뉴얼 페이지에는 슬래시를 특별한 방법으로 처리하는 방법이 언급되어 있지 않습니다.
그러나 각 슬래시를 해당 문자로 바꾸면 $
이 동작이 발생하지 않습니다. 예를 들어, 이름이 지정된 파일에 newinput
다음 값이 포함되어 있다고 가정합니다.
$zzzzz foo bar
$hij zzz
xyz abc
$abc
ijk lmnop
qwer tyuiop
abc def
즉, 문자가 문자로 변경된 점만 제외하면 newinput
과 동일합니다 . 이렇게 하면 이런 결과가 나오네요...input
/
$
/bin/sort newinput
$abc
$hij zzz
$zzzzz foo bar
abc def
ijk lmnop
qwer tyuiop
xyz abc
보시다시피, 이 경우에는 $
실제로 정렬 가능한 일반 문자로 처리됩니다 /bin/sort
.
무슨 일이죠? /bin/sort
캐릭터에 어떻게 관심을 끌 수 있나요 /
?
어떤 생각이나 제안이라도 미리 감사드립니다.
고쳐 쓰다: 데비안에서 이 작업을 수행하면 정렬이 켜짐과 /
꺼짐 모두 잘 작동합니다 $
.
그래서 이 동작이 우분투의 "기능"인지 궁금합니다.
답변1
아하! 나는 그것을 생각했다!
내 Ubuntu 컴퓨터에서는 LC_ALL
으로 설정되어 en_US.UTF8
있고 Debian 컴퓨터에서는 LC_ALL
으로 설정되어 있습니다 C.UTF8
. Ubuntu 컴퓨터에서 LC_ALL
로 변경하면 C.UTF8
슬래시가 일반 문자로 정렬됩니다. on a Debian box LC_ALL
로 변경하면 en_US.UTF8
슬래시도 무시됩니다.
따라서 이 동작은 코딩의 인공물인 것 같습니다 en_US.UTF8
.
이것이 올바른 행동입니까 en_US.UTF8
?
어쨌든, 이제 적절한 설정으로 이 "기능"을 해결하는 방법을 알았습니다 LC_ALL
.
폴리스티렌: 그리고 위에서 스티븐 해리스(Stephen Harris)가 지적한 것처럼 설정 LANG
과 C
같은 방식 으로 설정하면 이 문제가 해결됩니다.LC_ALL
C.UTF8