Откуда взялось соглашение об использовании одинарных тире для букв и двойных тире для слов и почему оно продолжает использоваться?
Например, если я наберу ls --help
, вы увидите:
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print octal escapes for nongraphic characters
--block-size=SIZE use SIZE-byte blocks
-B, --ignore-backups do not list implied entries ending with ~
...
Я пытался гуглить - and -- convention
даже с цитатами без особого успеха.
command-line
history
options
Larry
источник
источник
-
технически называется дефисом . Мы используем слово «тире» в большинстве случаев для обозначения тире (-), а иногда и тире (-), но ни один из них не является дефисом (-).java -version
find . -delete
-ab
что активирует и то,a
и другоеb
. Без двойного тире,-help
будет активироватьh
,e
,l
иp
варианты.Ответы:
В книге «Искусство программирования Unix» Эрик Стивен Рэймонд описывает, как развивалась эта практика:
[1] http://www.faqs.org/docs/artu/ch10s05.html
источник
Одной из причин для продолжения использования одиночных вариантов письма, потому что они могут быть нанизанные:
ls -ltr
это намного проще , чем набратьls --sort=time --reverse --format=long
. Есть несколько случаев, когда оба хороши для использования. Что касается поиска по этой теме, попробуйте "соглашение о параметрах командной строки Unix".источник
ls --sort=time --reverse --format=long
не стоит упоминать этот нестандартный метод.Цитата из Raymond по @jasonwryan имеет некоторую полезную информацию, но начинается в середине истории:
'-'
Вариант символ был использован в Multics. Bitsavers имеет руководство для своих пользовательских команд .'/'
используемые для TOPS и VMS), а некоторые - менее (например,'('
используемые в CMS VM / SP).-print
vs-pr
(стр. 3-8).getopt
были введены. Поскольку он не был частью оригинального Unix, есть утилиты, которые не использовалисьgetopt
и были оставлены как есть. Ноgetopt
помогая сделать программы последовательными.С другой стороны, используемые опции Unix
getopt
были односимвольными. Другие системы, в частности все более крупные, использовали ключевые слова. Некоторые (не все) допускают сокращение этих ключевых слов , т. Е. Не все символы предоставляются, если параметр был однозначным. В этом тесте на неоднозначность есть подводные камни. Например:sta
, подумав получитьstatus
. Это была аббревиатураstart
, и, не дав ничего начать , интерпретатор команд отключил меня.-v
(для версии), чем-vb
(визуальный звонок). X Toolkit не имеет прямого способа указать предпочтительный вариант, когда есть неоднозначность.Из-за этой потенциальной неопределенности некоторые разработчики предпочитают не допускать сокращений. Например, Lynx использует многосимвольные параметры без аббревиатур.
Не все программы использованы
getopt
: такtar
иps
нет. Как иrcs
(илиsccs
), как вы можете заметить, отметив, где тире был необязательным, а значения параметров были необязательными.Принимая все это во внимание, разработчики GNU адаптировали опции ключевых слов, используемые в других системах, расширив их,
getopt
чтобы предоставить длинную версию каждой короткой опции. Например, в журнале изменений textutils 1.0 написаноИзменение в fileutils было ранее:
и кто-то может найти его еще раньше, но кажется, что заголовок файла показывает самую раннюю дату:
который (например) совпадает с X Toolkit (1987). Большинство утилит Unix, с которыми вы знакомы (например
ls
,ps
), использовали существующие односимвольные опции, которые требуют периодического посещения руководства. При представленииgetopt_long
разработчики GNU не делали этого, сначала добавляя новые опции; они начали с табулирования существующих опций и предоставления соответствующей длинной опции.Поскольку они добавляли в существующий репертуар, снова возникла проблема конфликта с существующими опциями. Чтобы избежать этого, они изменили синтаксис, используя две черточки перед длинными параметрами.
Эти программы продолжают использовать
getopt_long
таким образом по обычным причинам:источник
В википедии интерфейс командной строки сообщается:
источник
Я предполагаю, что было желательно больше описательных опций, а также с более длинными опциями, вам не придется беспокоиться об исчерпании односимвольных опций.
Как только вы решите, что вам нужны длинные варианты, у вас возникнет проблема, по крайней мере, если вы планируете поддерживать как длинные, так и короткие варианты. Я не уверен, но я полагаю, что ответ arcege содержит ключ к тому, почему - и -. Общая процедура обработки, например getopt_long (), необходимо знать, может ли один аргумент командной строки содержать несколько параметров, например. -ltr. Таким образом, подпрограмма обработки должна была бы иметь возможность различать два. Если я прочитаю одну черту, -, то остальная часть аргумента командной строки может соответствовать нескольким параметрам. Если я прочитаю двойную черту, -, то остальная часть аргумента командной строки должна соответствовать одной опции.
Я только недавно использовал getopt_long (), и мне начинают нравиться длинные опции, так как они легче запомнить и самодокументируются. Если у меня есть следующие две команды:
./aggregator -f 15
./aggregator --flush-time 15
Я бы сказал, что второй, использующий опцию long, более понятен.
источник
Вероятно, есть несколько причин, по которым используются два метода. Одним из них, конечно же, является традиция. Программисты и пользователи - люди, и люди ожидают, что все будет работать определенным образом. Если нет причин для изменения (и действительно, для командной строки не так много причин для изменения), то не делайте этого.
При этом я знаю, что существуют инструменты, которые используют один дефис для длинного варианта или даже вообще избавляются от дефисов. Эти инструменты поначалу могут быть сложными и имеют тенденцию торчать как бородавки в унифицированной в противном случае системе.
Когда я изучал разницу между ними (и до того, как она стала второй натурой), я всегда помнил, что «короткий» дефис соответствует «коротким» вариантам, а «длинный» (или двойной) дефис соответствует «длинному». параметры. Я не знаю, использовались ли эти рассуждения при разработке стиля двойных дефисов, но это возможно.
источник