Некоторые программы выберут варианты как это:
$ someprogram -orange apple
И другие программы будут использовать что-то вроде этого:
$ otherprogram --orange apple
Существует ли "правило" или конвенция для этого в Linux/Unix/OSX?
Наиболее распространенным является GNU getopt
стиль, с одним тире для коротких опций и двумя тире для долгих опций.
Первоначально, программы Unix выбрали однобуквенные варианты, которым предшествует единственный тире, и дополнительно связались:
ls -laF
ls -l -a -F
Две команды выше равны.
Когда опция принимает значение, она переопределяет связывание: В gpg -aofoo.gpg
, -a
и -o
опции и foo.gpg
значение, данное -o
.
Большинство из них сделало, так или иначе.
tar cvzf
привычное зрелище. Текущие версии принимают tar -cvzf
также, и в зависимости от того, добавляете ли Вы тире, аргументы будут интерпретироваться совсем другими способами. Например, эти два означают то же самое (примечание, как опции без тире сразу не перед их значением):
tar -xf file.tgz -vzO /etc/passwd /var/backups
tar xfvzO file.tgz /etc/passwd /var/backups
BSD ps
всегда использование -
; SysV ps
никогда не делает. Версия Linux принимает и версии и изменяет ее поведение в зависимости от того, была ли опция снабжена префиксом тире. (В отличие от примера tar выше, PS изменяет значения опции также.)
Программы X11 использовали долгие опции, которым предшествует единственный тире или иногда знак "плюс":
xterm -class FooTerm +vb -u8
Это устанавливает опции class
и u8
, и сбросы vb
опция.
Стиль X11 является несовместимым со связыванием опции.
Позже, долгие опции были добавлены к GNU getopt()
способом это совместимо с опциями с одной буквой.
gpg -se --no-armor --output=signed.gpg
Это устанавливает -s
, -e
, и --no-armor
(который является напротив --armor
).
Обычно, --output=signed.gpg
и --output signed.gpg
эквивалентны. (Но не всегда – например, завихрение не принимает первого, только последний.)
(Если я вспоминаю правильно, долгие используемые опции +
как префикс, прежде чем это было изменено на --
.)
Спецификация POSIX имеет раздел Utility Argument Syntax, который описывает один параметр символа.
Большинство Windows-программ использует свои собственные синтаксические анализаторы, сводя пользователей с ума.
/a /b /c
, другие позволяют VMS-стиль /a/b/c
, все же другие предпочитают стиль Unix /abc
./
как префикс, некоторые также принимают -
, другие принимают только -
./foo bar
, /foo=bar
, /foo:bar
./quoted "like this"
, но некоторые программы берут "
как буквенный символ. (Это - оборотная сторона разрешения программе сделать ее собственное разделение слова; в Unix это обрабатывается оболочкой.)getopt
.Обычно первое найдено в более старых программах, которые слишком хорошо укреплены для изменения. Подобные долгие опции являются несовместимыми со стандартом getopt()
функция.
Второй стиль был представлен GNU getopt_long()
, и совместимо с существующими стандартами, которые ожидают, что первый стиль будет связан короткие опции (то есть, -orange
как ожидают, будет означать -o -r -a -n -g -e
). Этот стиль долгой опции сильно предпочтен.