12 unix
带有行 (aa ac ab) 的文件 unix 排序为 (aa ab ac) 而不是预期的 (ab aa ac)
就好像 sort 忽略了“-”字符。
有趣的是,破折号本身被正确排序 (abc -) 排序为 (-abc)。
为什么?无论如何要改变这种行为?
小智 17
sort(1)的排序顺序行为由您的语言环境设置控制(请参阅 参考资料man locale)。
有许多不同的区域设置,例如:
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
...
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
要选择所需的排序行为,您需要选择正确的 LC_COLLATE 值。在这种情况下,标准内置 C (POSIX) 语言环境是合适的:
$ sort testcase
aa
a-b
ac
$ LC_COLLATE=C sort testcase
a-b
aa
ac
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以通过设置 LC_ALL=C 来设置所有区域设置(从而更加一致)。由于这些是环境变量,您可以export LC_ALL=C在 shell 启动脚本中使用或类似的方式永久设置排序顺序。