Почему POSIX Find Parameters отличается от других стилей программы?

Почему параметр в команде find POSIX добавлен с одним дефис для многосимвольных имен параметров, в то время как в большинстве других программ используется один дефис для обозначения нескольких односимвольных флагов и двойных дефис для обозначения одиночных имен параметров с несколькими символами?

Это кажется непоследовательным, и мне любопытно, как

A. Почему это действительно не противоречит, или
B. История этого решения.

  • найти с -exec eval $ 0
  • Как разделить переменную $ 0, чтобы найти каталог и относительные пути в bash?
  • Как управлять всеми параметрами сценария оболочки сразу?
  • Имеет ли параметр порядок значение с tar?
  • Как я могу подключить путь к pushd?
  • Как передать параметры псевдониму?
  • Можно ли проверить использование хэша файла вместо всего файла, используя OpenSSL dgst?
  • Документация параметров ядра
  • 3 Solutions collect form web for “Почему POSIX Find Parameters отличается от других стилей программы?”

    Обратите внимание, что поиск POSIX поддерживает такие параметры, как другие команды, и -- помечает их конец, как и другие команды. Это -H и -L .

    Параметры -print , -type … не являются параметрами, их иногда называют предикатами . Они являются аргументами, порядок которых имеет значение, которые появляются после путей к файлам, которые сами появляются после опций. У вас также есть ( и ! . Вместе они создают выражение , которое используется для определения того, какие файлы нужно найти.

    find не единственный. [ (aka test ) и expr – это другие команды, аргументы которых используются для построения выражения .

    Как и find , у [ есть операторы, которые начинаются с - и больше чем одна буква ( -gt , -gt …).

    Как и find , у test есть проблемы, когда эти операторы могут быть путаны с операндами .

     find -- "$file1" "$file2" -type f [ -f "$file1" -a -f "$file2" ] 

    Если $file2 есть ! , это проблема с find . Если это = , это проблема с (некоторыми) [ .

    Для всех find , test и expr , использование вариантов для создания выражения на самом деле не сработало. Другим вариантом могло быть то, что одна строка была оценена как выражение типа awk или sed . как для

     find f1 f2 \( -type f -mtime -1 -o ! -type f -newer x \) -exec ls -ld {} + 

    Делать:

     find 'found = 0 if (typeof($f) == "f") { if (age($f) > 1) found=1 } else if (age($f) < age("x")) found = 1 if ($found) exec_multi("ls -ld {}")' f1 f2 

    Но это означает реализацию грамматического анализатора в find . Это также означает потенциальный котировки кошмара для "x" и командной строки выше.

    Фактически AT & T Research действительно придумал такую ​​команду: tw (tree walker), но, хотя теперь это открытый исходный код, я не знаю, что он действительно используется из AT & T.

    find старше, чем соглашение GNU об использовании -- для многобуквенных опций. GNU представила это соглашение, чтобы нарушить существующую несогласованность между программами с однобуквенными опциями, для которых -bar означал три варианта -b -a -r и программы с многобуквенными опциями, для которых -bar означал одну опцию тем, что имя. К моменту появления GNU это могло повлиять на будущие программы, но не изменять существующие программы, такие как find или другие, такие как утилиты X11.

    find used - как префикс для предикатов и действий, потому что они несколько похожи на опции: они являются ключевыми словами, частью конечного набора, имеющим смысл для конкретной команды. Хотя они не анализируются, как опции, они являются лексикографически подобными вариантами.

    Я думаю, что не было сознательного решения, чтобы найти другую. У меня нет ссылок, кроме этого обмена по электронной почте, но из того, что я помню (воспользовавшись поиском с середины восьмидесятых):

    Что вы должны понять, так это то, что для указания опций и аргументов (в качестве аргументов командной строки для программ) не было никаких стандартов. В разных программах реализованы разные способы ведения дел. В какой-то момент одна тире для опций и не-тире для аргументов была повторно использована / скопирована из часто используемых команд, а версия getopt стала доступной как для оболочек, так и для версий на C. (помню, мне пришлось скомпилировать мои собственные потому что * nix, над которым я работал, не имел его в библиотеке).

    Конечно, однотипные опции с одним символом устанавливали ограничения на tty (то же самое, что приводит к сокращенным командам ( cp vs. copy ), но там, где не объяснимо. Разработчики find, вероятно, предпочли удлинить опцию одного символа для большей ясности, поскольку а также более 26 вариантов символов в нижнем регистре. Они делали это до двойного тире -- для длинных вариантов стали популярными (середина девятнадцати лет IIRC).

    На исходной странице руководства внизу:

     BUGS The syntax is painful. 
    Interesting Posts

    ls -l – групповые каталоги – сначала (действуют также на символические ссылки)

    как получить процессор, которому в настоящее время назначен поток?

    проверить, есть ли переменная в списке

    Цветовая схема Vim не всегда работает

    Установите umask для блока systemd

    Только для чтения файловой системы, которая позволяет также временно записывать в другое место назначения

    Получение ошибок сегментации изнутри glib и gobject – Я ДУМАЮ, Я хочу построить / статически связать с независимой версией glib2

    Не удается определить, почему код выхода не регистрируется

    Поиск эффективного способа отображения PDF-файлов

    Могу ли я написать C-программы для Linux на OS X?

    Как установить Neo4j на CENTOS 6.7 x86_64?

    Что это значит! перед полем имени пользователя в / etc / passwd?

    Как показать конкретные строки из определенных столбцов файла

    Конвертировать PDF в другой размер страницы (Письмо США -> A4)

    Найти папки, начинающиеся с той же строки

    Linux и Unix - лучшая ОС в мире.