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

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

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам