Harmanlama sırası, LC_COLLATE
yalnı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 B
değ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, B
aralık, çünkü bulunursa a-z
aramda her şeyi içerir a
ve z
büyük harflerle dahil harmanlama amacıyla, içinde B
aracılığıyla Z
.
Test edilen tüm sistemler en_US
oluşturulan yerel ayarlara sahiptir. Ayrıca yerel ayarları değiştirmeyi de denedim: B
yukarı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_US
yerellerdeki 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 B
ise [a-z]
hem değil biri, çıkış LC_COLLATE=en_US locale -k LC_COLLATE
Dİ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_COLLATE
IS
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=2039
collate-codeset="UTF-8"
C
yerel ayar bir geri dönüş olarak kullanılır ve harmanlama sırası düz bayt değerlerdir, bu nedenle B
eşleştirilmez. Çıktısında görünen bir yerel ayarda test edin locale -a
.
en_US
Ancak, oluşturulan olup olmadığını kontrol etmedi .