C
내가 확인한 로케일에서는 en_US.UTF-8
점(".")이 대시("-") 다음에 정렬됩니다. cd
전체 카탈로그에 대해 "som"이라고 말하면 이전 some-dir.git
에 완료된 것입니다 some.git
. 또한 내 프로젝트의 테마를 나열했으며 파일 zdharma-256.theme
은 zdharma.theme
. 나에게 자연스러운 순서는 짧은 카탈로그를 먼저 완성하는 것입니다.
LC_COLLATE
이 문제를 해결하는 데 사용할 수 있나요?
어쩌면 대조 문제가 아니라 처음 정렬할 때 확장을 무시하는 문제일까요? Zsh
사용할 수 있는 코드(와일드카드 태그 등) 가 있습니까 ?
답변1
아니요, 그러한 교정은 없습니다. 적어도 표준 교정은 아닙니다.
다음을 통해 직접 확인할 수 있습니다.
먼저 파일을 준비합니다. (라인
Aa
과aa
여기의 내용은 테스트 목적으로만 사용됩니다.)cat >test <<\eof Aa aa some.git some-dir.git eof
sort
시스템에서 사용 가능한 모든 데이터 정렬을 사용하여 명령을 실행합니다.for loc in $(locale -a); do echo "____${loc}____"; LC_COLLATE="$loc" sort test; done > test_sorted
이제
test_sorted
즐겨찾는 편집기를 열고 다양한 로캘이 정렬되어Aa
다른지 확인하세요 . 즉, 이전에는aa
모두 .some-dir.git
some.git
pcregrep -M 'some.git\nsome' test_sorted
아무것도 주어지지 않습니다.
-
앞에 나타나는 이유는 .
ASCII 및 유니코드 테이블 때문입니다(참고자료 참조 man ascii
). 하이픈의 10진수 코드(기술적으로 하이픈 빼기라고 함)는 45(U+002D)이고 점의 10진수 코드는 46(U+002E)입니다.
절실하다면 이 동작을 변경하는 로케일을 직접 작성할 수 있습니다. 가장 쉬운 방법은 현재 파일 중 하나를 수정하는 것입니다 /usr/share/i18n/locales/
. 이 작업은 에서 수행할 수 있습니다.