이상한 기본 정렬 동작

이상한 기본 정렬 동작

여기서 무슨 일이 일어나고 있는지 이해하는 데 어려움을 겪고 있습니다.

[guido@localhost 9]$ ls -1 Star\ Wars\ Episode\ *
Star Wars Episode II Attack of the Clones.avi
Star Wars Episode III Revenge of the Sith.avi
Star Wars Episode I The Phantom Menace.avi
Star Wars Episode IV A New Hope.avi
Star Wars Episode VI Return of the Jedi.avi
Star Wars Episode V The Empire Strikes Back.avi

III\b이전에 I\b, 하지만 II\b이전에 III\b? 원인이 무엇이든 그 행동은 일관되지 않습니다. 이는 GUI에서 얻은 정렬 결과와도 같습니다. 모든 공백이 실제로 공백이고 파일 이름 간에 대소문자 차이가 없는지 확인했습니다. 어떻게 그래? 로마 숫자를 건너뛰고 정렬하려고 합니까?

기타 테스트:

[guido@localhost 9]$ find -name "Star Wars *" -print
./Star Wars Episode I The Phantom Menace.avi
./Star Wars Episode II Attack of the Clones.avi
./Star Wars Episode III Revenge of the Sith.avi
./Star Wars Episode IV A New Hope.avi
./Star Wars Episode V The Empire Strikes Back.avi
./Star Wars Episode VI Return of the Jedi.avi

하지만:

[guido@localhost 9]$ find -name "Star Wars *" -print | sort
./Star Wars Episode II Attack of the Clones.avi
./Star Wars Episode III Revenge of the Sith.avi
./Star Wars Episode I The Phantom Menace.avi
./Star Wars Episode IV A New Hope.avi
./Star Wars Episode VI Return of the Jedi.avi
./Star Wars Episode V The Empire Strikes Back.avi

하지만:

[guido@localhost 9]$ find -name "Star Wars *" -print | sort -f
./Star Wars Episode I The Phantom Menace.avi
./Star Wars Episode II Attack of the Clones.avi
./Star Wars Episode III Revenge of the Sith.avi
./Star Wars Episode IV A New Hope.avi
./Star Wars Episode V The Empire Strikes Back.avi
./Star Wars Episode VI Return of the Jedi.avi

문서에서 알 수 있듯이 내 로케일이 이에 영향을 미칠 수 있다고 생각하지 않습니다(어쨌든 en_US.utf8로 설정했습니다). 내가 무엇을 놓치고 있나요?

[guido@localhost 9]$ sort --version
sort (GNU coreutils) 8.22

답변1

로케일에 따라 정렬할 때 공백(및 대소문자도 가능)은 무시됩니다. 따라서 공통 접두사 "Star Wars Episode" 다음에 다음과 같은 정렬을 수행할 수 있습니다.

  • 국제투자협회
  • 삼,
  • 정보 기술 연구소

find결과는 정확히 "예상" 순서인 디렉터리 순서로 반환 됩니다.

이를 기반으로 "기존" 정렬로 돌아갈 수 있습니다.매뉴얼 페이지:

기본 바이트 값을 사용하여 기존 정렬 순서를 얻으려면 LC_ALL=C를 설정합니다.

관련 정보