/bin/sort는 입력에서 슬래시를 무시하는 것 같습니다.

/bin/sort는 입력에서 슬래시를 무시하는 것 같습니다.

저는 우분투 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)가 지적한 것처럼 설정 LANGC같은 방식 으로 설정하면 이 문제가 해결됩니다.LC_ALLC.UTF8

관련 정보