Apakah gnu coreutils rusak?


10

Pertimbangkan input berikut untuk disortir:

cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM

Sekarang coba jalankan sort foo

Output tidak diurutkan ketika mencoba ini di salah satu kotak linux saya (gnu coreutils versi 6.9-7.4). Output diurutkan ketika dijalankan di bawah cygwin (gnu coretuils 8.5). Komentar?

Jawaban:


18

Penyortiran tergantung pada lokal; khususnya, itu tergantung pada $LC_COLLATE(mungkin ditimpa oleh $LC_ALL), kembali ke $LANGjika tidak ada. Perintah localeakan menunjukkan kepada Anda nilai-nilai apa yang Anda kerjakan secara efektif. Lihat man 3 strcoll, man 3 setlocale, dll

LC_COLLATE=C(atau POSIXatau tidak ada lokal sama sekali) menghasilkan perbandingan byte-by-byte yang ketat.

LC_COLLATE=en_US.utf8 menghasilkan semacam kesetaraan-abjad, dengan tanda baca diabaikan dan karakter dalam kelas ekivalensi yang sama diperlakukan secara setara.


Memang, export LC_COLLATE=Cmembuat semacam bersikap seperti yang diharapkan
— Leo Alekseyev

3
Aksen tidak sepenuhnya diabaikan. Stephanemacam sebelumnya Stéphane , tapi Stephaniemacam sesudahnya Stéphane. ésetara dengan e(seperti ê, ë, ẽ...), tetapi jika ada dasi, maka urutan antara mereka didefinisikan dengan baik. Itu sama di kamus kertas tua yang bagus.
— Stéphane Chazelas

Jika Anda benar-benar ingin mengetahui semuanya: unicode.org/reports/tr10
— Martin Tournoij
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.