我正在运行 Ubuntu 20.0.4。
考虑以下文件的这些内容(假设文件名为input
)...
/zzzzz foo bar
/hij zzz
xyz abc
/abc
ijk lmnop
qwer tyuiop
abc def
如果我运行/bin/sort input
,我会得到以下输出......
/abc
abc def
/hij zzz
ijk lmnop
qwer tyuiop
xyz abc
/zzzzz foo bar
如您所见,排序算法完全忽略了前导斜杠。手册页中没有sort
任何内容说明正斜杠以任何特殊方式处理。
但是,如果我用字符替换每个正斜杠,$
则不会发生这种行为。例如,假设一个名为的文件newinput
包含这些值...
$zzzzz foo bar
$hij zzz
xyz abc
$abc
ijk lmnop
qwer tyuiop
abc def
换句话说,除了字符已更改为字符之外,newinput
与 相同。当我这样做时,我得到这些结果......input
/
$
/bin/sort newinput
$abc
$hij zzz
$zzzzz foo bar
abc def
ijk lmnop
qwer tyuiop
xyz abc
如您所见,在这种情况下,$
确实被视为正常的可排序字符/bin/sort
。
那么,这里发生了什么?我如何引起/bin/sort
对/
角色的关注?
提前感谢您的任何想法和建议。
更新:如果我在 Debian 下执行此操作,则排序工作正常,无论是/
和$
.
所以,我想知道这种行为是否可能是 Ubuntu 的“功能”。
啊哈!我想到了!
在我的 Ubuntu 机器上,我
LC_ALL
设置为en_US.UTF8
,在我的 Debian 机器上,我LC_ALL
设置为C.UTF8
. 如果我在我的 Ubuntu 机器上更改LC_ALL
为C.UTF8
,正斜杠将被排序为常规字符。如果我在 Debian 盒子上更改LC_ALL
为en_US.UTF8
,那么斜杠也会在那里被忽略。所以这种行为似乎是
en_US.UTF8
编码的产物。这是正确的行为
en_US.UTF8
吗?无论如何,我现在知道如何通过适当的设置来解决这个“功能”
LC_ALL
。PS:而且,正如斯蒂芬·哈里斯(Stephen Harris)在上面指出的那样,设置
LANG
为以与设置为C
相同的方式解决此问题。LC_ALL
C.UTF8