Là gut coreutils sắp xếp bị hỏng?


10

Hãy xem xét các đầu vào sau để sắp xếp:

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

Bây giờ hãy thử chạy sort foo

Đầu ra không được sắp xếp khi thử điều này trên bất kỳ hộp linux nào của tôi (phiên bản gnu coreutils 6.9-7.4). Đầu ra được sắp xếp khi chạy dưới cygwin (gnu coretuils 8.5). Bình luận?

Câu trả lời:


18

Sắp xếp phụ thuộc vào miền địa phương; cụ thể, nó phụ thuộc vào $LC_COLLATE(có thể bị ghi đè bởi $LC_ALL), quay trở lại $LANGnếu nó không tồn tại. Lệnh localesẽ cho bạn thấy những giá trị mà bạn làm việc hiệu quả. Xem man 3 strcoll, man 3 setlocalevv

LC_COLLATE=C(hoặc hoàn toàn POSIXkhông có miền địa phương) dẫn đến việc so sánh từng byte một nghiêm ngặt.

LC_COLLATE=en_US.utf8 dẫn đến một loại tương đương theo thứ tự chữ cái, với dấu chấm câu bị bỏ qua và các ký tự trong cùng một lớp tương đương được xử lý như nhau.


Thật vậy, export LC_COLLATE=Clàm cho sắp xếp hành xử như mong đợi
Leo Alekseyev

3
Điểm nhấn không hoàn toàn bị bỏ qua. Stephaneloại trước Stéphane , nhưng Stephaniecác loại sau Stéphane. étương đương với e(như ê, ë, ...), nhưng nếu có một cà vạt, sau đó thứ tự giữa những người được xác định rõ. Nó giống nhau trong một cuốn từ điển giấy cũ.
Stéphane Chazelas

Nếu bạn thực sự muốn biết tất cả: unicode.org/reports/tr10
Martin Tournoij
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.