Linux의 기본 정렬 순서는 무엇입니까?

Linux의 기본 정렬 순서는 무엇입니까?

오랫동안 나는 프로그램의 기본 동작이 sortASCII 순서를 사용하는 것이라고 생각했습니다. 그러나 매개변수 없이 다음 줄을 입력하면 다음과 같습니다 sort.

#
@

나는 가지고있다:

@
#

하지만 ASCII 테이블에 따르면 #35와 64입니다 @. 다른 예시:

A
a

출력은 다음과 같습니다

a
A

누구든지 이것을 설명할 수 있나요? 그런데 이것을 사용할 때 "사전순서"란 무엇입니까 sort -d?

답변1

POSIX가 아닌 로캘을 사용하고 있는 것 같습니다.

노력하다:

export LC_ALL=C

그런 다음 sort.

info sort확실하게:

(1) POSIX가 아닌 로캘을 사용하는 경우(예: "LC_ALL"을 "en_US"로 설정) "sort"는 익숙한 정렬과 다른 출력을 생성할 수 있습니다. 이 경우 "LC_ALL" 환경 변수를 "C"로 설정하세요. "LC_COLLATE"를 설정하는 데에는 두 가지 문제가 있습니다. 첫째, 'LC_ALL'도 설정되어 있으면 아무런 효과가 없습니다. 둘째, "LC_CTYPE"(또는 "LC_CTYPE"이 설정되지 않은 경우 "LANG")이 호환되지 않는 값으로 설정된 경우 정의되지 않은 동작을 갖습니다. 예를 들어, "LC_CTYPE"이 "ja_JP.PCK"이지만 "LC_COLLATE"가 "en_US.UTF-8"인 경우 정의되지 않은 동작이 발생합니다.

답변2

말했듯 man sort이 "사전순"은 "공백과 영숫자 문자만 고려됩니다"를 의미합니다. 예를 들어, 주어진 데이터

The
!quick
brown
@fox
jumps
#over
17
$lazy
  dogs
%42
times.

간단한 sort명령 생성

  dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.

(공백 문자로 시작하는 줄과 문자 및 숫자로 시작하는 줄 앞에 !, #, $, 기호 1을 배치합니다 . 즉,%@영숫자), 그러나 sort -d생산

  dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.

  dogs공백으로 시작하기 때문에 여전히 첫 번째이지만 특수(구두점) 문자는 무시됩니다.  와 17사이에는 일반적 으로 이전 문자로 이동하는 문자가 앞에 옵니다 . ____________ 1ASCII 값 순서: 공백=040, =041, =043, =044, =045 및 =0100. 일부 키보드에서는 대략 왼쪽에서 오른쪽 순서라는 점에 유의하세요(스페이스바 무시).42foxbrownjumps42fox17

!#$%@

답변3

정렬 순서를 결정하려면 각 줄마다 다른 문자를 사용하여 파일을 만들고 정렬하면 됩니다. 결과 출력은 정렬 순서를 알려줍니다.

관련 정보