为什么这些排序的顺序不同?

为什么这些排序的顺序不同?

我希望01在这两种排序中都出现在第一个或最后一个,但实际上改变第二个记录的长度会改变排序顺序。为什么?

$ { echo 01; echo 0_12; } | sort
01
0_12

$ { echo 01; echo 0_1; } | sort
0_1
01

更糟糕的是,我疯了吗?

$ { echo 01_; echo 0_1; } | sort
0_1
01_
$ { echo 01__; echo 0_12; } | sort
01__
0_12

答案1

文档指出

环境指定的语言环境会影响排序顺序。设置 LC_ALL=C 可获得使用本机字节值的传统排序顺序。

一个解决方案可能是明确设置语言环境:

{ echo 01; echo 0_12; } | env -i LC_COLLATE=C sort }

相关内容