파일 이름을 정렬 할 때 ls
와 같은 문자는 무시합니다 -,_
. 나는 그것들을 정렬 할 때도 사용할 것으로 기대했다.
예를 들면 :
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
이제이 파일들을 ls -1
다음 과 같이 표시하십시오 :
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
내가 기대 한 것은 다음과 같습니다.
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
즉, 정렬 할 때 영숫자가 아닌 문자가 고려 될 것으로 예상했습니다.
누구든지이 행동을 설명 할 수 있습니까? 이 행동은 표준에 의해 규정되어 있습니까? 아니면 인코딩이 UTF-8이기 때문입니까?
업데이트 : 이것은 UTF-8 정렬과 관련이있는 것 같습니다.
$ LC_COLLATE=C ls -1
a,1
a,2
a-1
a-2
a.1
a.2
a1
a2
a_1
a_2
[_-,.]
그룹화되고 어떻게 든 반 무시되는 것이 사실입니다 . 간단하게, 그리고 만에 정렬 변경하기 때문에, 나는 그런 조합이 정의 정확히 어디에서 어떻게 모르겠지만, 그것은 정렬 문제가 될 수 있어야 C를 (통해하는 LC_COLLATE=C ls -l
)이이 가정 (당신이 예상 정렬 순서를 제공하기 위해 충분 LC_ALL
하다 무시하지 않음 LC_COLLATE
). 이것은 유니 코드 베이직 다국어 플레인의 모든 문자 범위에 적용됩니다. 이것을 구현하는 예제 스크립트를 포함하도록 답변을 편집했습니다 ...
LC_COLLATE=C ls
됩니까?