Потому что 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
интерпретирующее все до следующего пробела в качестве параметра текущей опции.