排序时逗号是否位于数字之前?

排序时逗号是否位于数字之前?

我有一个文件foo,其内容是

140,22
236,224
2,86

如果我用它排序,sort foo我会得到相同的结果。这告诉我,是在数字之后,或者至少是,在 之后3

矛盾的是,发生了以下情况:

$echo -e "2\n,\n3" | sort
,
2
3

这告诉我那,是在之前2。我不明白。有人可以解释一下吗?

答案1

排序取决于您的区域设置,所以可能存在一些奇怪的解释。我在我的系统上得到了与你相同的结果。这里,逗号是被忽略通过语言环境。因此,如果我们将276和添加296到您的列表中:

$ sort /tmp/tosort
140,22
236,224
276
2,86
296

这也解释了第二个命令的结果。逗号未排序第一的,却被忽视了。因此,它本质上是对空字符串进行排序。如果您在测试中添加一个空字符串,您也会在开头看到它。

$ echo -e "2\n,\n3\n" | sort

,
2
3

(我不清楚为什么空字符串在逗号之前。我怀疑当有平局时使用逗号。)

使用“标准”POSIX 语言环境,您将获得更可预测的结果。

$ export LC_ALL=C
$ sort foo
140,22
2,86
236,224

相关内容