2008-08-26 35 views

Trả lời

20

Các man-page trên OS X nói:

CẢNH BÁO ******* ******* Nơi đặt theo quy định của môi trường ảnh hưởng đến thứ tự sắp xếp. Đặt LC_ALL = C để nhận được thứ tự sắp xếp truyền thống sử dụng giá trị byte gốc.

có thể giải thích mọi thứ.

Nếu một số hệ thống của bạn không có hỗ trợ ngôn ngữ, chúng sẽ mặc định với ngôn ngữ đó (C), vì vậy bạn sẽ không phải đặt nó trên những ngôn ngữ đó. Nếu bạn có một số hỗ trợ ngôn ngữ và muốn có cùng một hành vi, hãy đặt LC_ALL=C trên các hệ thống đó. Đó sẽ là cách để có nhiều hệ thống như tôi biết làm theo cùng một cách.

Nếu bạn không có bất kỳ hệ thống địa phương ít hơn, chỉ cần đảm bảo rằng họ chia sẻ ngôn ngữ có lẽ sẽ là đủ.

Để biết thêm thông tin kinh điển, hãy xem Mô tả kỹ thuật UNIX đơn, Mô tả phiên bản 2 của locale, environment variables, setlocale() và mô tả tiện ích sort(1).

+1

Làm cách nào để đặt ngôn ngữ thành LC_ALL = C? – Malcolm

+1

@Malcolm: nhiều đề xuất sẽ cho bạn biết để xuất biến LC_ALL ... nhưng điều đó sẽ thay đổi cài đặt trình bao của người dùng. Xem câu trả lời của tôi [ở đây] (http://stackoverflow.com/questions/6923464/unix-sort-ignores-whitespaces/17180962#17180962) để đặt câu trả lời cho phạm vi đã đặt – mateor

3

Điều này có thể là kết quả của sự khác biệt ngôn ngữ:

$ echo 'CO2_ 
CO_' | env LC_ALL=C sort 
CO2_ 
CO_ 


$ echo 'CO2_ 
CO_' | env LC_ALL=en_US sort 
CO_ 
CO2_ 

Thiết lập biến môi trường LC_ALL với giá trị tương tự nên khắc phục sự cố.

3

Điều này có thể do các cài đặt khác nhau của locale environment variables. sort sẽ sử dụng các cài đặt này để xác định cách so sánh các chuỗi. Bằng cách thiết lập các biến môi trường theo cách bạn muốn trước khi gọi sort, bạn sẽ có thể buộc nó hoạt động theo một cách cụ thể.

2

Để biết thêm thông tin bạn muốn biết về sort, hãy đọc specification of sort trong Single Unix Specification v3. Trạng thái này nêu rõ

So sánh [...] phải được thực hiện bằng cách sử dụng trình tự đối chiếu của ngôn ngữ hiện tại.

IOW, cách sort các loại phụ thuộc vào cài đặt ngôn ngữ (ngôn ngữ) của môi trường mà tập lệnh đang chạy.

Các vấn đề liên quan