Для многих целей функции GNU getopt()
10 и getopt_long()
являются хорошим выбором.
GNU getopt()
предназначен для аргументов с одной буквой и имеет довольно близкие к стандарту поведения POSIX, и их можно убедить вести себя более ортодоксально, установив переменную окружения POSIXLY_CORRECT. Разница в том, что GNU getopt()
распознает аргументы параметров после первого аргумента без аргумента и переставляет аргументы таким образом, чтобы все аргументы параметров обрабатывались до любого из аргументов без параметра. Это иногда имеет значение - хотя контексты, как правило, немного эзотеричны. Есть еще несколько дополнительных трюков.
GNU getopt_long()
- лучший механизм для работы с длинными опциями, такими как --help
. Он может обрабатывать необязательные аргументы, сопоставляя однобуквенные параметры и всевозможные вещи.
Существует множество других доступных пакетов, которые обрабатывают различные варианты.
(Perl имеет множество модулей Getopt, что отражает, сколько усилий было вложено в течение многих лет.)
Вы можете найти полезную дополнительную информацию на What is the general syntax of a Unix shell command. Вы также можете прочитать спецификацию POSIX для условных обозначений командной строки в главе Utility Conventions.
Отдать свой голос за «бросьте свое». a) Вы учитесь на этом, b) это весело, и c) вам не придется беспокоиться о переносимости или в зависимости от чужого кода, и d) вы знаете, что у вас будут все функции, которые вы хотите, и ни один из у вас нет. Однако, я думаю, я буду в меньшинстве. –
@ Крис Лутц: если вы не катитесь самостоятельно, чтобы он придерживался очень близко к стандарту, тогда вам грозит производство программ, которые раздражают использование. Использование стандартного парсера параметров уменьшает обучение для всех остальных (кто использует вашу программу) и обычно упрощает обслуживание. –
Недавно я выкатил https://github.com/visionmedia/commander.ca порт-иш моего анализатора параметров ruby и node –