ลำดับการเรียงผ่าน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
เพื่อเปรียบเทียบรวมทั้งตัวอักษรทุนผ่าน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 เหตุใดจึงมีความแตกต่างระหว่างการติดตั้ง 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
มีการสร้างหรือไม่