ลำดับการเรียงผ่านLC_COLLATEกำหนดไม่เพียงเรียงลำดับของอักขระแต่ละตัวเท่านั้น แต่ยังรวมถึงความหมายของช่วงอักขระด้วย หรือไม่ พิจารณาตัวอย่างต่อไปนี้:
unset LANGUAGE LC_ALL
echo B | LC_COLLATE=en_US grep '[a-z]'
สังหรณ์ใจBไม่ได้อยู่ใน[a-z]ดังนั้นสิ่งนี้ไม่ควรส่งออกอะไร นั่นคือสิ่งที่เกิดขึ้นบน Ubuntu 8.04 หรือ 10.04 แต่ในบางเครื่องทำงาน Debian Lenny หรือบีบBพบเพราะช่วงa-zรวมถึงทุกอย่างที่ระหว่างaและzเพื่อเปรียบเทียบรวมทั้งตัวอักษรทุนผ่านBZ
ระบบทั้งหมดที่ทำการทดสอบจะมีen_USสถานที่เกิดขึ้น ฉันยังพยายามที่แตกต่างกันสถานที่เกิดเหตุ: ในเครื่องที่Bจะถูกจับคู่ข้างต้นเดียวกันที่เกิดขึ้นในสถานบริการทุก (ส่วนใหญ่เป็นภาษาลาตินตาม: {en_{AU,CA,GB,IE,US},fr_FR,it_IT,es_ES,de_DE}{iso8859-1,iso8859-15,utf-8}ยังสถานที่ภาษาจีน) ยกเว้นญี่ปุ่น (ในการเข้ารหัสใด ๆ ) และ/CPOSIX
ช่วงของอักขระหมายความว่าอย่างไรในนิพจน์ทั่วไปเมื่อคุณไปเกิน ASCII เหตุใดจึงมีความแตกต่างระหว่างการติดตั้ง Debian บางอย่างในมือข้างหนึ่งและการติดตั้ง Debian อื่น ๆ และ Ubuntu ในอีกด้านหนึ่ง? ระบบอื่นทำงานอย่างไร? ใครถูกและใครควรจะรายงานบั๊ก?
(โปรดทราบว่าฉันถามเกี่ยวกับพฤติกรรมของช่วงอักขระเช่น[a-z]ในen_USตำแหน่งที่ตั้งโดยเฉพาะอย่างยิ่งในระบบที่ใช้ libc เป็นหลัก GNU ฉันไม่ได้ถามว่าจะจับคู่ตัวพิมพ์เล็กหรือตัวอักษรตัวพิมพ์เล็ก ASCII ได้อย่างไร)
สองเครื่อง Debian หนึ่งที่Bอยู่ใน[a-z]และเป็นหนึ่งในสถานที่ที่มันไม่ได้เป็นผลผลิตของการLC_COLLATE=en_US locale -k LC_COLLATEมี
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มีการสร้างหรือไม่