Linux默认的排序顺序是什么?

Linux默认的排序顺序是什么?

很长一段时间我认为程序的默认行为sort是使用 ASCII 顺序。但是,当我在不带任何参数的情况下输入以下行时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”(或“LANG”,如果“LC_CTYPE”未设置)设置为不兼容的值,则它具有未定义的行为。例如,如果“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位于42fox之间brownjumps尽管42fox前面有通常会将它们移动到 之前的字符17
____________
1按其 ASCII 值的顺序:空格=040、!=041、#=043、$=044、%=045 和@=0100。请注意(忽略空格键)在某些键盘上这大约是从左到右的顺序。

答案3

要确定排序顺序,只需创建一个文件,每行使用不同的字符,然后对其进行排序。结果输出将告诉您排序顺序。

相关内容