2008-08-26 5 views

ответ

20

man-page на OS X говорит:

******* ******* ВНИМАНИЕ Языковой задаваемый переменной среды влияет на порядок сортировки. Установите LC_ALL = C, чтобы получить традиционный порядок сортировки, который использует значения собственного байта.

который может объяснить вещи.

Если некоторые из ваших систем не поддерживают локаль, они будут по умолчанию использовать этот язык (C), поэтому вам не придется устанавливать его на них. Если у вас есть некоторые, которые поддерживают локали и хотят одинакового поведения, установите LC_ALL=C на эти системы. Это будет способ иметь как можно больше систем, как я знаю, так же.

Если у вас нет никаких локальных систем, просто убедитесь, что они разделяют локаль, вероятно, будет достаточно.

Для получения более канонической информации см ® Спецификации, Version 2 Описания Единого UNIX из locale, environment variables, setlocale() и описания утилиты sort(1).

+1

Как установить языковой стандарт на LC_ALL = C? – Malcolm 2012-02-07 17:23:51

3

Это может быть результатом различий локали:

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


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

Установка переменной среды LC_ALL в то же значение должно исправить эту проблему.

3

Возможно, это связано с различными настройками locale environment variables. sort будет использовать эти параметры, чтобы определить, как сравнивать строки. Установив эти переменные среды так, как вы хотите, до вызова sort, вы должны заставить его вести себя определенным образом.

2

Для получения более подробной информации о sort, прочитайте specification of sort в Single Unix Specification v3. В нем указаны

Сравнения [...] должны выполняться с использованием последовательности сортировки текущего языкового стандарта.

IOW, how sort Сортировка зависит от локальных (языковых) настроек среды, в которой работает скрипт.