데이터 정렬 을 통해 순서 LC_COLLATE
를 정의 개별 문자의 정렬 순서뿐만 아니라 문자 범위의 의미뿐만 아닙니다. 아니면? 다음 스 니펫을 고려하십시오.
unset LANGUAGE LC_ALL
echo B | LC_COLLATE=en_US grep '[a-z]'
직관적으로에 B
있지 않으므로 [a-z]
아무것도 출력하지 않아야합니다. 그것이 우분투 8.04 또는 10.04에서 일어나는 일입니다. 그러나 데비안 레니 또는 스퀴즈를 실행하는 일부 시스템에서, B
범위가 있기 때문에, 발견 a-z
사이의 모든 것을 포함 a
하고 z
대문자를 포함하여 조합 순서에 B
통해를 Z
.
테스트 된 모든 시스템에는 en_US
로케일이 생성됩니다. 또한 로케일을 변경하려고 시도했습니다. B
위와 일치 하는 시스템에서 {en_{AU,CA,GB,IE,US},fr_FR,it_IT,es_ES,de_DE}{iso8859-1,iso8859-15,utf-8}
일본어 (사용 가능한 인코딩) 및 C
/를 제외한 모든 사용 가능한 로케일 (대부분 라틴어 기반 : 중국어 로케일)에서도 동일하게 발생 합니다 POSIX
.
ASCII를 넘어 서면 정규 표현식에서 문자 범위의 의미는 무엇입니까 ? 한편으로 일부 데비안 설치와 다른 데비안 설치와 우분투가 다른 이유는 무엇입니까? 다른 시스템은 어떻게 작동합니까? 누가 옳고 누가 버그를보고해야합니까?
로케일, 주로 GNU libc 기반 시스템 [a-z]
에서 와 같은 문자 범위의 동작에 대해 구체적으로 묻습니다 en_US
. 소문자 또는 ASCII 소문자를 일치시키는 방법을 묻지는 않습니다.
두 데비안 기계, 하나 B
에 [a-z]
그렇지 않은 하나의 출력 LC_COLLATE=en_US locale -k LC_COLLATE
IS
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=1
collate-codeset="ISO-8859-1"
그리고 출력 LC_COLLATE=en_US.utf8 locale -k LC_COLLATE
은
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=2039
collate-codeset="UTF-8"
C
로케일이 폴백으로 사용되며 데이터 정렬 순서는 스트레이트 바이트 값이므로 B
일치하지 않습니다. 의 출력에 나타나는 로케일에서 테스트하십시오 locale -a
.
en_US
그래도 생성 되었는지 확인하지 않았습니다 .