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

为什么 sort -k5nr 不是语法错误?
$ ls -l | sort -k 5 -n -r
$ ls -l | sort -k5nr

我发现这两个命令生成相同的输出。
但我不明白为什么我可以结合使用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.

为什么cut不像那样表现sort

答案1

因为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 行及后续行,只是使用常规getopt行为将所有内容(直到下一个空格)解释为当前选项的参数。

相关内容