Por que o Gnu classifica de forma diferente na minha máquina OSX e na máquina Linux?

2

Eu tenho uma máquina OSX em que sort executa o GNU sort do coreutils 8.26 (instalado pela Homebrew), e uma máquina Linux na qual sort executa o GNU sort do coreutils 8.25.

No Mac:

mac$ echo -e "{1\n2" | sort
2
{1

Enquanto no Linux:

linux$ echo -e "{1\n2" | sort
{1
2

Estou ciente de que sort depende da localidade. Eu executei locale na máquina Linux, prefixei cada linha de saída com export e executei as linhas resultantes na máquina OSX antes de executar (no mesmo terminal) o comando sort novamente, que deu a mesma saída de antes. / p>

No entanto, notei que executar locale no Mac não mostra todas as linhas que aparecem no Linux e não tenho certeza se isso está relacionado.

A localidade no Linux:

linux$ locale
LANG=en_CA.UTF-8
LANGUAGE=en_CA:en
LC_CTYPE="en_CA.UTF-8"
LC_NUMERIC="en_CA.UTF-8"
LC_TIME="en_CA.UTF-8"
LC_COLLATE="en_CA.UTF-8"
LC_MONETARY="en_CA.UTF-8"
LC_MESSAGES="en_CA.UTF-8"
LC_PAPER="en_CA.UTF-8"
LC_NAME="en_CA.UTF-8"
LC_ADDRESS="en_CA.UTF-8"
LC_TELEPHONE="en_CA.UTF-8"
LC_MEASUREMENT="en_CA.UTF-8"
LC_IDENTIFICATION="en_CA.UTF-8"
LC_ALL=en_CA.UTF-8

E localidade no OSX:

mac$ locale
LANG="en_CA.UTF-8"
LC_COLLATE="en_CA.UTF-8"
LC_CTYPE="en_CA.UTF-8"
LC_MESSAGES="en_CA.UTF-8"
LC_MONETARY="en_CA.UTF-8"
LC_NUMERIC="en_CA.UTF-8"
LC_TIME="en_CA.UTF-8"
LC_ALL="en_CA.UTF-8"

Descobri que, se eu definir LC_ALL=C nas duas máquinas, elas classificarão 2 antes de {1 . Mas se eu definir LC_ALL=en_CA.UTF-8 em ambas as máquinas, tenho a saída diferente como acima. O mesmo se eu definir LC_ALL=en_CA.utf8 em ambas as máquinas. ( locale -a listas en_CA.utf8 na máquina Linux mas en_CA.UTF-8 na máquina OSX.)

Alguma ideia do que está acontecendo aqui?

    
por tremby 03.05.2017 / 01:59

0 respostas