$ ls -l | sort -k 5 -n -r
$ ls -l | sort -k5nr
I find out these two command generate the same output.
But I don't understand why I can combine 5
with n
?
Why not a syntax error?
edit:
$ 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.
Why cut
dose not behave like sort
?
Best Answer
Because
sort
is implemented in a way that parses these in the way you expect.See also here:
This looks like a combination of both (works without whitespace, and combination of single-character options).
They are simply different programs whose argument parsing is implemented differently.
In
coreutils
8.13, compare the following::src/sort.c
line 4315, invoking the special integer parsing functionparse_field_count
, that returns with the first invalid character (i.e. once the number value is finished and the next option starts): That's whysort
can handle your arguments.src/cut.c
, line 803 ff., simply using the regulargetopt
behavior of interpreting everything until the next white space as parameter to the current option.