Почему варианты с длинными строками имеют двойную черту?

320
HeavenlyHarmony

Этот вопрос, возможно, задавался раньше ...

Почему флаги типа --recursive имеют две черты вместо просто -recursive? Я знаю, что сокращенная версия просто -r. Существует ли максимальное количество символов, которое может иметь флаг с одним тире, прежде чем он потребует двух тире?

1
это может быть полезно: https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html также это: http://leo.ugr.es/elvira/devel/Tutorial/Java/essential /attributes/_posix.html Frank Thomas 6 лет назад 1

2 ответа на вопрос

2
Scott

Проблема в том, что вы можете говорить такие вещи, как ls -laR; это эквивалентно ls -l -a -R. Так -recursiveбудет интерпретироваться как -r -e -c -u -r -s -i -v -e.

Он также используется для разрешения длинных аргументов и позволяет передавать аргументы в опцию без путаницы. Frank Thomas 6 лет назад 0
1
Alex

Нет точного правила использовать одинарный или двойной тире в качестве опции для программы. Если кто-то решил работать с опциями самостоятельно, он может реализовать все, что захочет. Но если программист не ищет PITA и хочет, чтобы программа использовала общий, хорошо узнаваемый способ, то можно было бы использовать стандартные функции, getopt/getopt_longкоторые обрабатывают длинные параметры (длинную строку, как вы просили), как двойные пунктирные короткие параметры (один символ) ) с префиксом с одной чертой. Функция getoptявляется частью языка <unistd.h>Си. Эту же функцию можно использовать в системах на основе Unix в стандартных оболочках, man getopt 1которые используют параметры синтаксического анализа с одинарной и двойной штриховой (длинной) опцией.

Существует ли максимальное количество символов, которое может иметь флаг с одним тире, прежде чем он потребует двух тире?

Если кто-то использует функцию, описанную выше, короткие варианты могут иметь только один единственный символ.