Необычное поведение команды сортировки linux - PullRequest
2 голосов
/ 03 мая 2011

В оболочке Linux результат echo -e "arrays2 2\narrays 2\narrays3 2" | sort равен

arrays  2
arrays2 2
arrays3 2

и результат echo -e "arrays2 28\narrays 28\narrays3 28" | sort равен

arrays2 28
arrays 28
arrays3 28

Почему во втором случае строка arrays2 28 появляется в первой строке. Это ошибка, или я что-то упустил?

Я пробовал это на RHEL4 и Ubuntu 11.04.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 03 мая 2011

Поведение зависит от локали:

echo -e "arrays2 28\narrays 28\narrays3 28" | LANG=C sort

отпечатки

arrays 28
arrays2 28
arrays3 28

Пока

echo -e "arrays2 28\narrays 28\narrays3 28" | LANG=de_DE.UTF-8 sort

печать

arrays2 28
arrays 28
arrays3 28

(Обратите внимание, что для этого должен быть установлен языковой стандарт, если языковой стандарт не существует, поведение будет таким же, как при LANG=C).

2 голосов
/ 03 мая 2011

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

echo  -e "aaa\nfoo\narrays2 28\narrays 28\narrays3 28" | LC_ALL=C sort -
aaa
arrays 28
arrays2 28
arrays3 28
foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...