Подтвердить что ты не робот

Почему ** не сортировать ** сортировать то же самое на каждой машине?

Используя ту же команду sort с тем же вводом, вы получаете разные результаты на разных машинах. Как это исправить?

4b9b3361

Ответ 1

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

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

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

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

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

Более подробную информацию о канонической информации см. в описании спецификации Single Single UNIX ®, версии 2 locale, переменные окружения, setlocale() и описание sort (1).

Ответ 2

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

$ 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. sort будет использовать эти параметры, чтобы определить, как сравнивать строки. Установив эти переменные среды так, как вы хотите, перед вызовом sort, вы должны заставить его вести себя определенным образом.

Ответ 4

Более того, о чем вы когда-либо хотели узнать о sort, прочитайте спецификация sort в Single Unix Specification v3. В нем указано

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

IOW, как сортировка sort зависит от языковых (языковых) настроек среды, в которой работает script.