为什么 sort -k5nr 不是语法错误?

kev*_*kev 2 bash sorting

$ ls -l | sort -k 5 -n -r
$ ls -l | sort -k5nr
Run Code Online (Sandbox Code Playgroud)

我发现这两个命令生成相同的输出。
但我不明白为什么我可以5n?
为什么不是语法错误?

编辑:

$ ls -l | cut -d: -n -f 2    
$ ls -l | cut -d:nf2
cut: the delimiter must be a single character
Try `cut --help' for more information.
Run Code Online (Sandbox Code Playgroud)

为什么cut不表现得像sort

Dan*_*eck 6

因为sort是以您期望的方式解析这些的方式实现的。

另见此处

  • 有时选项和它们的参数一起运行,有时用空格分隔,有时用字符分隔,通常是: 或 =。因此,“Prog -fFilename”、“Prog -f Filename”、“Prog -f:Filename”、“Prog -f=Filename”。
  • 有些程序允许组合单字符选项;其他人没有。开关“-fA”可能与“-f -A”含义相同,也可能不正确,甚至可能是有效但不同的参数。

这看起来像是两者的组合(无需空格和单字符选项的组合)。


它们只是不同的程序,其参数解析的实现方式不同。

coreutils8.13 中,比较以下内容:

  • src/sort.c第 4315 行,调用特殊的整数解析函数parse_field_count,返回第一个无效字符(即一旦数字值完成并且下一个选项开始):这就是为什么sort可以处理您的参数。
  • src/cut.c,第 803 行 ff.,简单地使用getopt解释所有内容的常规行为,直到下一个空格作为当前选项的参数。