Иногда я вижу -h
руководство для приложения, а иногда я нахожу --help
в руководстве.
В чем разница между ними? Есть ли история / история об этом?
Стандартным местом для документации о командах unix является руководство по unix (также называемое «man-страницы») (разделы 1 и 8), доступ к которому осуществляется через команду man
. Например, чтобы получить документацию для команды grep
, вы должны использовать man grep
.
Некоторые команды также предоставляют некоторую встроенную документацию, если они запускаются с опцией, например -h
или --help
. Это не совсем стандартно, и то, как и как это предусмотрено, сильно зависит от команды. Что касается разницы между -h
и --help
, это в основном историческое. "Стандарт" для командных опций в Unix развился довольно немного за десятилетия.
Когда unix был впервые "рожден", разные команды использовали опции в совершенно разных форматах; этот ранний хаос сохраняется в нескольких командах, таких как tar
(который обычно предполагает, что его первый аргумент - это параметры, начинается ли он с -
) или dd
(который обрабатывает все свои аргументы как длинные опции без --
).
Но это не заняло много времени, чтобы появился стандарт сортов: опции начинались с одной черты и состояли из одной буквы или другого символа, и они должны были предшествовать любым позиционным (не опциональным) параметрам. Это было до того, как во многие команды была включена какая-либо встроенная справка, поэтому команды этой эпохи часто используют -h
для чего-то другого, кроме справки (например, grep -h
не печатает имена файлов, где будет grep
).
Совсем недавно появилось несколько дополнений к этому "стандарту": длинные опции, начинающиеся с двойной черты (например, --help
), позволяющие опциям указывать после или внутри позиционных параметров, и использование --
для указания конца опций (поэтому все, что после этого является позиционным параметром, даже если оно начинается с тире). Некоторые команды используют эти новые стили параметров, некоторые нет.
Также недавно некоторые команды включили / добавили встроенную справку. То, как это вызывается, зависит, в основном, от прихоти разработчика (ей) команды, а также от того, имел ли -h
уже какое-то другое значение (как в случаях, подобных grep
). Поэтому некоторые команды принимают -h
за помощь, некоторые принимают --help
, некоторые оба, а некоторые нет.
По иронии судьбы, лучший способ узнать, как получить встроенную справку для команды (если она существует), это прочитать ее справочную страницу. Вот выдержка из man grep
:
-H Always print filename headers with output lines.
-h, --no-filename
Never print filename headers (i.e. filenames) with output lines.
--help Print a brief help message.
Обычно используется --help
, но если -h
тоже работает, разработчики, вероятно, включили его, чтобы быстрее набирать текст.
Однако это не стандартно и очень зависит от команды - vim
использует оба, например, а bash
использует только --help
.
Таким образом, если вы используете Linux, man command
обычно является полным справочным руководством.
Вы также можете прочитать этот ответ для получения дополнительной информации об аргументах командной строки.
-h
короткий атрибут предназначен для экономии времени пользователя, который набирает команду (команды), иногда очень длинную;
Атрибут --help
предназначен для скриптов bash (которые должны быть понятны многим пользователям). В этом примере -h
очевиден, но иногда есть много атрибутов, поэтому использование -j
, -i
-g
в bash-скрипте корректно - bash-скрипт будет работать правильно, но ваш коллега по работе, вероятно, убьет вас :)
Это действительно зависит от конкретной программы. Там может быть никакой разницы между ними. --help может предоставить более подробный текст, чем -h.