대시 앞에 포인트를 정렬하는 LC_COLLATE가 있습니까?

대시 앞에 포인트를 정렬하는 LC_COLLATE가 있습니까?

C내가 확인한 로케일에서는 en_US.UTF-8점(".")이 대시("-") 다음에 정렬됩니다. cd전체 카탈로그에 대해 "som"이라고 말하면 이전 some-dir.git에 완료된 것입니다 some.git. 또한 내 프로젝트의 테마를 나열했으며 파일 zdharma-256.themezdharma.theme. 나에게 자연스러운 순서는 짧은 카탈로그를 먼저 완성하는 것입니다.

LC_COLLATE이 문제를 해결하는 데 사용할 수 있나요?

어쩌면 대조 문제가 아니라 처음 정렬할 때 확장을 무시하는 문제일까요? Zsh사용할 수 있는 코드(와일드카드 태그 등) 가 있습니까 ?

답변1

아니요, 그러한 교정은 없습니다. 적어도 표준 교정은 아닙니다.

다음을 통해 직접 확인할 수 있습니다.

  1. 먼저 파일을 준비합니다. (라인 Aaaa여기의 내용은 테스트 목적으로만 사용됩니다.)

    cat >test <<\eof
    Aa
    aa
    some.git
    some-dir.git
    eof
    
  2. sort시스템에서 사용 가능한 모든 데이터 정렬을 사용하여 명령을 실행합니다.

    for loc in $(locale -a); do
        echo "____${loc}____";
        LC_COLLATE="$loc" sort test;
    done > test_sorted
    
  3. 이제 test_sorted즐겨찾는 편집기를 열고 다양한 로캘이 정렬되어 Aa다른지 확인하세요 . 즉, 이전에는 aa모두 .some-dir.gitsome.git

    pcregrep -M 'some.git\nsome' test_sorted
    

    아무것도 주어지지 않습니다.

-앞에 나타나는 이유는 .ASCII 및 유니코드 테이블 때문입니다(참고자료 참조 man ascii). 하이픈의 10진수 코드(기술적으로 하이픈 빼기라고 함)는 45(U+002D)이고 점의 10진수 코드는 46(U+002E)입니다.

절실하다면 이 동작을 변경하는 로케일을 직접 작성할 수 있습니다. 가장 쉬운 방법은 현재 파일 중 하나를 수정하는 것입니다 /usr/share/i18n/locales/. 이 작업은 에서 수행할 수 있습니다.

관련 정보