Некоторые команды и программы используют -h
для отображения справки, некоторые используют --help
а некоторые распознают оба. Это сводит меня с ума. Есть ли правило, чтобы выбрать правильный?
2 ответа
Боюсь, что нет правила: обвинять историю.
Изначально DOS и его предшественники использовали /?
, в то время как Unix использовал -
в качестве индикатора опции, поскольку /
был разделителем каталогов; так как оболочка может расширяться -?
в другую строку по расширению имени файла, -h
стало нормой.
Пока все относительно просто.
В cmd
многие команды сохраняют /?
условно, но те, которые транскрибируются из Unix/Linux, могут использовать -h
, /h
или /help
.
Между тем, в Linux некоторые команды стали настолько всеобъемлющими, что большая часть алфавита использовалась в опциях, поэтому более подробный --
стал использоваться для опций, а один -
оставался альтернативой для более распространенных опций. И вот тут-то и начались конфликты: в таких командах, как ls
и du
чувствовалось, что -h
лучше использовать в качестве синонима для длинного --human-readable
, так как его, скорее всего, будут вызывать чаще, чем help.
Чтобы усложнить ситуацию, местные языковые версия нескольких программ перевели параметры, так что по - французский опция помощи становится -a
от пособника или ассистера, например.
Одна вещь, которая часто работает, --
это: это почти всегда недопустимый параметр, и программа обычно сообщает об ошибке, а затем либо дает полную справку, либо сообщает вам, что такое опция справки.
В конечном итоге пользователи подчиняются прихотям программистов: и в Windows, и в Linux есть утилиты, написанные огромным и разнородным числом людей, и мы в их руках.
Мне бы хотелось, чтобы все было по-другому, но в конечном итоге мы должны работать с тем, что доступно, или тратить свою жизнь на поддержание собственных версий.
Это из-за следующей причины:
Прежде всего, большинство команд linux поддерживают параметры, используя следующую функцию:
getopt() и getopt_long().
getopt() использовался для поддержки одного символа с «-», чтобы различать различные опции
Параметр long, то есть getopt_long() (например: --help), является расширением GNU, которое обеспечивает большую читаемость, а также понимание значения параметров.
getopt_long() поддерживает как короткую, так и длинную типизацию параметров, поэтому многие из команд могут поддерживать обе.
Другая причина, по которой хотелось бы поддерживать оба параметра: Сохранение обратной совместимости.
JFYR: http://en.wikipedia.org/wiki/Getopt
Надеюсь выше поможет.