Harmanlama sırası, LC_COLLATEyalnızca bireysel karakterlerin sıralama düzenini değil, karakter aralıklarının anlamını da tanımlar. Yoksa öyle mi? Aşağıdaki pasajı göz önünde bulundurun:
unset LANGUAGE LC_ALL
echo B | LC_COLLATE=en_US grep '[a-z]'
Sezgisel, içeride Bdeğil [a-z], bu yüzden hiçbir şey çıkmamalı. Ubuntu 8.04 veya 10.04'te olan da budur. Ama Debian Lenny veya sıkmak çalışan bazı makinelerde, Baralık, çünkü bulunursa a-zaramda her şeyi içerir ave zbüyük harflerle dahil harmanlama amacıyla, içinde Baracılığıyla Z.
Test edilen tüm sistemler en_USoluşturulan yerel ayarlara sahiptir. Ayrıca yerel ayarları değiştirmeyi de denedim: Byukarıda eşleştirilen makinelerde , {en_{AU,CA,GB,IE,US},fr_FR,it_IT,es_ES,de_DE}{iso8859-1,iso8859-15,utf-8}Japonca (mevcut herhangi bir kodlamada) ve C/ hariç tüm yerel ayarlarda (çoğunlukla latin tabanlı: ayrıca Çin yerelleri) de aynı şey geçerli POSIX.
Karakter aralıkları , ASCII'nin ötesine geçtiğinizde normal ifadelerde ne anlama geliyor ? Bir yandan bazı Debian kurulumları, diğer yandan diğer Debian kurulumları ve Ubuntu arasında neden bir fark var? Diğer sistemler nasıl davranır? Kim haklı ve kime karşı bir hata bildirilmeli?
(Özellikle GNU libc tabanlı sistemlerde [a-z], en_USyerellerdeki gibi karakter aralıklarının davranışını özellikle sorduğumu unutmayın . Küçük harflerle veya ASCII küçük harflerini nasıl eşleştireceğinizi sormuyorum.)
İki Debian makineleri, birinde Bise [a-z]hem değil biri, çıkış LC_COLLATE=en_US locale -k LC_COLLATEDİR
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=1
collate-codeset="ISO-8859-1"
ve çıkış LC_COLLATE=en_US.utf8 locale -k LC_COLLATEIS
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=2039
collate-codeset="UTF-8"
Cyerel ayar bir geri dönüş olarak kullanılır ve harmanlama sırası düz bayt değerlerdir, bu nedenle Beşleştirilmez. Çıktısında görünen bir yerel ayarda test edin locale -a.
en_USAncak, oluşturulan olup olmadığını kontrol etmedi .