我运行的是 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 的一个“功能”。
答案1
啊哈!我想到了!
在我的 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
。
聚苯乙烯:而且,正如 Stephen Harris 上面指出的,设置LANG
为与设置为C
相同的方式可以修复此问题。LC_ALL
C.UTF8