Многие люди искали наилучшую практику для использования getopt
и getopts
в течение долгих лет. A Количество методов Для анализа аргументов были обозначены, но идеального решения не было найдено. Однако с появлением GetOptions Это долгий путь подходит к концу.
GetOptions
Он предназначен для того, чтобы быть готовой к использованию замены для getopt
и Getopts
. Не требуется специальных встроенных комментариев, файлов конфигурации или предварительной сборки, поэтому кривая обучения низкая, а обслуживание легко. Другими словами, просто установите GetOptions И следующий скрипт оболочки будет работать как очарование.
#!/bin/sh VERSION="0.1" parser_definition() { setup REST help:usage -- "Usage: example.sh [options]... [arguments]..." '' msg -- 'Options:' flag FLAG -f --flag -- "takes no arguments" param PARAM -p --param -- "takes one argument" option OPTION -o --option on:"default" -- "takes one optional argument" disp :usage -h --help disp VERSION --version } eval "$(getoptions parser_definition) exit 1" # argument parsing echo "FLAG: $FLAG, PARAM: $PARAM, OPTION: $OPTION" printf '%s\n' "$@" # output rest arguments
$ ./example.sh -h Usage: example.sh [options]... [arguments]... Options: -f, --flag takes no arguments -p, --param PARAM takes one argument -o, --option[=OPTION] takes one optional argument -h, --help --version
Это вариант генератора анализатора
GetOptions
по сути является генератором, который генерирует анализатор опции, но утверждает, что он вариант анализатор. Поскольку это очень быстро (минимум), может динамически генерировать анализатор опции во время выполнения и аргументов Parse.
Я не хочу устанавливать GetOptions!
Если вы хотите запустить свой сценарий без GetOptions
Установлен, вы можете включить его основную библиотеку в свой сценарий и распространять ее. Лицензия CC0 , так что нет никаких ограничений вообще. Его размер составляет 200-300 линий (5 КБ-8 КБ), в зависимости от конфигурации, чрезвычайно компактен по сравнению с другими реализациями.
Я не хочу включать библиотеку!
Если вы не хотите включать библиотеку в свои сценарии, вы можете использовать ее в качестве опции генератора анализатора. Если вы заранее генерируете анализатор, вам не нужно включать библиотеку, а скорость выполнения будет еще быстрее. Сгенерированный анализатор прост, короткий и только одна функция. Его размер будет примерно таким же, как и то, что вы будете писать вручную.
Нет требований и соответствия Posix
Все, что вам нужно использовать GetOptions
только Posix Shell (то есть Dash 0.5.4+, Bash 2.03+, KSH88+, ZSH 3,1,9+). Он решительно содержит стандарты и поддерживает синтаксис опции POSIX и GNU и поддерживает длинные опции, а также длинные сокращения опции и подкоманды.
Вывод
GetOptions
очень прост в использовании. Но в отличие от своего небольшого размера, имеет много функций, расширяемости и гибкости. Вы можете настроить сообщения об ошибках, проверки, автоматически генерировать справку и функции вызова при указанных параметрах.
Если вы хотите узнать больше о расширенных функциях, посетите сайт проекта. Есть множество примеров. Однако для основного использования больше нечего объяснить.
Оригинал: «https://dev.to/ko1nksm/the-easiest-way-to-parse-arguments-using-getoptions-for-bash-and-shell-scripts-47p5»