Вопрос: В чем разница между синглом и двумя символами тире на командах оболочки?


Я новичок в работе в оболочке, и использование этих команд кажется произвольным. Есть ли причина, по которой один флаг имеет один тире, а другой может иметь двойную тире?


51
2018-05-10 14:27


Источник


Предполагается, что он будет регулироваться стандартом POSIX: iam.ubc.ca/guides/javatut99/essential/attributes/_posix.html - cjc
Эта ссылка сейчас 404 @cjc :( Возможно, более надежная ссылка может быть en.wikipedia.org/wiki/POSIX - Bernhard Hofmann


Ответы:


За одним дефисом могут следовать несколько односимвольных флагов. Двойной дефис содержит один, многозадачный вариант.

Рассмотрим этот пример:

tar -czf

В этом примере, -czf задает три односимвольных флага: c, z, а также f,

Теперь рассмотрим еще один пример:

tar --exclude

В этом случае, --exclude задает один, многозадачный вариант с именем exclude, Двойной дефис неоднозначно аргументирует аргумент командной строки, гарантируя, что tar интерпретирует его как exclude а не сочетание e, x, c, l, u, d, а также e,


89
2018-05-10 14:32



@kylex, нет, так как нет длинной опции с именем «c», а «- длинный вариант», а не одна символьная опция. - psusi
Иногда даже длинные команды могут быть однократными. Например, «cdrecord» использует все однократные команды (-eject -dao ...). Все зависит от программы, но большинство (!) Из них используют - для одиночных и - для многосимвольных (длинных) команд - mulaz
@mulaz, да, cdrecord делает довольно много глупостей. - psusi
также иметь в виду - используется сам по себе, как правило, означает конец опций. см. здесь для получения дополнительной информации: unix.stackexchange.com/questions/11376/... - Sirex
@killjoy, потому что, будь то по незнанию или выбору, авторы этих программ, конечно, не придерживались условного соглашения. Как cdrecord упомянутые годы назад в вышеупомянутых комментариях. - psusi


Все зависит от программы. Обычно «-» используется для «коротких» опций (однобуквенный, -h), а «-» используется для опций «long» (er) (--help).

Короткие варианты обычно можно комбинировать (так что «-h -a» совпадает с «-ha»)

В Unix-подобных системах для определения параметров обычно используется дефис-минус ASCII. За персонажем обычно следуют одна или несколько букв. Аргумент, который является одним дефен-минусом сам по себе без каких-либо букв, обычно указывает, что программа должна обрабатывать данные, поступающие со стандартного ввода, или отправлять данные на стандартный вывод. Два символа дефис-минус (-) используются в некоторых программах для указания «длинных опций», где используются более описательные имена опций. Это общая функция программного обеспечения GNU.

источник


14
2018-05-10 14:35



Так почему же это java -version и ant -version? - killjoy


Это действительно конвенция. Тем не менее, это может помочь парсерам лучше узнать о вариантах, переданных программе. Кроме того, есть чистые утилиты, которые могут помочь разобрать эти команды, например getopt(3) или нестандартных getopt_long(3) чтобы помочь разобрать аргументы программы.

Это хорошо, потому что у нас может быть несколько коротких вариантов, как говорят другие ответы, например tar -xzf myfile.tar.gz,

Если был аргумент «lisa» для ls, вероятно, было бы другое значение для типа ls -lisa чем ls --lisa, Первые l, i, s, а также a параметры, а не слово.

Фактически, вы могли бы написать ls -l -i -s -a, что означает то же самое, что и ls -lisa, но это будет зависеть от программы.

Существуют также программы, которые не подчиняются этому соглашению. Прежде всего, для моего зрения, dd а также gcc,


5
2018-05-10 18:56





короткие варианты с одиночным тире против длинных опций с двойной тире

короткие варианты могут быть объединены в один аргумент;

for example: ls -lrt #instead of ls -l -r -t

Если мы разрешаем длинные варианты с одной тире, это вызывает неоднозначность. Чтобы решить эту проблему, мы используем двойную тире для длинных опций.


2
2017-08-29 03:48