$ ls -l | sort -k 5 -n -r
$ ls -l | sort -k5nr
我发现这两个命令生成相同的输出。
但我不明白为什么我可以结合使用5
?n
为什么
没有语法错误?
编辑:
$ 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”含义相同,也可能不正确,甚至可能是一个有效但不同的参数。
这看起来像是两者的结合(无需空格即可工作,并且是单字符选项的组合)。
它们只是不同的程序,其参数解析的实现方式不同。
在coreutils
8.13 中,比较以下内容:
src/sort.c
行 4315,调用特殊整数解析函数parse_field_count
,返回第一个无效字符(即,一旦数字值完成并且下一个选项开始):这就是为什么sort
可以处理你的参数。src/cut.c
,第 803 行及后续行,只是使用常规getopt
行为将所有内容(直到下一个空格)解释为当前选项的参数。