2
$ 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 ответ1

5

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .