이것이 내 마음을 아프게 합니다:
echo -e "http://z.com\nhttps://a.com" | sort
vs.
echo -e "http://z.com\nhttps://a.com" | LC_ALL=C sort
UTF-8로 정렬할 때 정렬은 http와 https를 무시하는 것 같습니다. 하지만 정말 나를 미치게 만드는 것은 이 동작에 대한 문서를 찾을 수 없다는 것입니다. 누군가 나에게 조언을 해줄 수 있습니까?
답변1
C
로캘 에서는 문화적 으로 적절한 사전순으로 sort
locale의 원시 바이트에 지정된 순서로 정렬합니다 .en_US
sort
로케일
C
:http://z
(58)이 (115)보다 작기https://a
때문에 먼저 정렬하세요 .':'
's'
로케일
en_US
:https://a
미국 영어 사전 편찬 순서는 구분 기호를 무시하므로 먼저 정렬되므로http://z
문자열은httpsa
및 에 따라 정렬 되며httpz
분명히s
앞에 옵니다z
.
man 1 sort
설명하다:
*** WARNING *** The locale specified by the environment affects sort
order. Set LC_ALL=C to get the traditional sort order that uses native
byte values.
정렬 순서만 변경하려면 LC_COLLATE
환경 변수를 설정하면 됩니다.
$ echo -e 'ab:d\nabc:d' | LC_COLLATE=en_US.UTF-8 sort
abc:d
ab:d
$ echo -e 'ab:d\nabc:d' | LC_COLLATE=C.UTF-8 sort
ab:d
abc:d
참고: 환경 변수는 자세한 변수 LC_ALL
보다 우선합니다 .LC_