为什么UNIX排序实用程序在没有选项-b的情况下忽略前导空格?

eze*_*zon 7 unix

[这是我向后问的一个类似问题的重写......抱歉这个混乱!]

我对领先的s和标准sort实用程序感到困惑.考虑以下内容myfile:

a
 b
  a
Run Code Online (Sandbox Code Playgroud)

执行sort -t : myfile收益意外的结果,至少对我来说:

a
  a
 b
Run Code Online (Sandbox Code Playgroud)

那有意义吗?<space>应该在之前a-z(如ASCII的情况)或之后.在第一种情况下,我会期待

  a
 b
a
Run Code Online (Sandbox Code Playgroud)

而在第二种情况下

a
 b
  a
Run Code Online (Sandbox Code Playgroud)

那么,为什么sort看起来似乎应用了-b选项(忽略前导s),如果不包括它?事实上,为了安全起见,我添加了-t选项,以便在每一行中只有一个字段.(根据POSIX标准,"字段包含最大的非分隔字符序列,并且在没有选项-t的情况下,任何前面的字段分隔符." sort myfile产生相同的输出,这也是意外的.)

提前致谢!

Dav*_*son 10

这取决于区域设置.同

LC_COLLATE=en_US.utf8 sort myfile
Run Code Online (Sandbox Code Playgroud)

我得到你意想不到的结果,并且

LC_COLLATE=C sort myfile
Run Code Online (Sandbox Code Playgroud)

我得到你的预期结果.另见bash排序异常顺序.空间问题?

(我不知道为什么排序处理-b和-t像这样.)


Rob*_*ker 7

$ sort -t : foo
a
    a
  b
$ env LC_ALL=C sort -t: foo
    a
  b
a
Run Code Online (Sandbox Code Playgroud)

从手册页: *警告*环境指定的区域设置会影响排序顺序.设置LC_ALL = C以获取使用本机字节值的传统排序顺序.