Chr*_*isB 5 sorting bash shell locale posix
看起来posix \n 命令行实用程序会做一些基于语言环境的花哨 的恶作剧来比较给定的字符串。sort
我扫描了手册页,但似乎找不到一种方法让它使用原始字节值。\n有没有办法让sort(我有 GNU coreutils 版本)的行为像\nqsort(array_of_my_strings, N, strcmp)中那样C?使用其他工具的解决方案sort也可以。
为了演示,我目前得到:
\nprintf "\\xC3\\xBC\\n\\x76\\n" | sort\n\xc3\xbc\nv\nRun Code Online (Sandbox Code Playgroud)\n因为德语元音变音\xc3\xbc似乎与位于 v 之前的 u 进行比较,尽管它\\xC3大于\\x76。
我想要的是
\nprintf "\\xC3\\xBC\\n\\x76\\n" | sort --raw-bytes-please\nv\n\xc3\xbc\nRun Code Online (Sandbox Code Playgroud)\n
排序规则顺序和(多字节)字符类型受您的区域设置的影响。用于禁用多字节和区域设置感知行为的区域设置名称是C。
因此:
LC_COLLATE=C LC_CTYPE=C sort
Run Code Online (Sandbox Code Playgroud)
...将仅设置字符类型和排序规则(假设LC_ALL未设置,在这种情况下它们将被忽略)。
作为大锤子,您还可以使用:
LC_ALL=C sort
Run Code Online (Sandbox Code Playgroud)
尽管有副作用,例如将用于打印错误消息的语言更改为最初由 的sort开发人员编写的字符串,而没有有效的转换表。