长期以来,我认为程序的默认行为sort
是使用ASCII顺序。但是,当我输入以下行时sort
不带任何参数:
#
@
我有:
@
#
但是根据ASCII表,分别#
是35和@
64。另一个示例是:
A
a
输出为:
a
A
有人可以解释吗?顺便说一句,使用时的“字典顺序”是什么sort -d
?
长期以来,我认为程序的默认行为sort
是使用ASCII顺序。但是,当我输入以下行时sort
不带任何参数:
#
@
我有:
@
#
但是根据ASCII表,分别#
是35和@
64。另一个示例是:
A
a
输出为:
a
A
有人可以解释吗?顺便说一句,使用时的“字典顺序”是什么sort -d
?
Answers:
看起来您正在使用非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”,则会得到未定义的行为。
要确定排序顺序,只需在每行上创建一个具有不同字符的文件,然后对其进行排序。结果输出将告诉您排序顺序。
如前所述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
之前42
,并fox
在之间brown
和之间。
____________ 以其ASCII值的顺序为1:space = 040,= 041,= 043,= 044,= 045和= 0100。请注意(忽略空格键),这在某些键盘上大约是从左到右的顺序。jumps
42
fox
17
!
#
$
%
@
sort
许多分布应该有所不同。