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?

Leo Alekseyev
sumber

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.

singkat
sumber
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