sorting不按预期sorting(空间和区域设置)

我想通过linuxsorting一个文本文件,看起来像这样

 v 1006 v10 1 v 1011 

我期待这样的结果:

 v 1006 v 1011 v10 1 

然而,即使有各种select,使用sortv10 1线仍然在中间。 为什么? 我会明白v10 1是在底部的顶部(取决于如果空间字符小于或大于1 ),但是为什么它保持在中间?

它使用系统区域设置来确定字母的排序顺序。 我的猜测是,你的语言环境,它忽略空白。

 $ cat foo.txt v 1006 v10 1 v 1011 $ LC_ALL=C sort foo.txt v 1006 v 1011 v10 1 $ LC_ALL=en_US.utf8 sort foo.txt v 1006 v10 1 v 1011 

您的语言环境会影响行如何排序。 例如,我用我当前的语言环境得到这个:

 % echo -e "v 1006\nv10 1\nv 1011" | sort v 1006 v10 1 v 1011 

但与C语言环境,我得到这个:

 % echo -e "v 1006\nv10 1\nv 1011" | LC_ALL=C sort v 1006 v 1011 v10 1 

我不确定它为什么这样表现。 LC_ALL=C几乎等于关闭所有意外处理并返回到字节级操作(是的 – 我正在跳过细节)。

为什么不同的区域设置跳过空间是很难解释的。 如果任何人都可以解释,那就好了:)

参见GNU工具FAQ