Я не совсем уверен насчет разрешенных комбинаций опций для вашего скрипта, но вот что-то, что должно быть близко.
Просто для забавы, я написал скрипт, который имеет подобные опции для вашей проверки этогос последними документами .
Мне было проще всего написать [options]
в главном разделе использования, и у меня есть все варианты, приведенные ниже, в качестве альтернативы, без особых комбинаций.
Я нахожусь на macOS, поэтому яЯ использую Bash 3.2 (с исправлениями docopts.sh
, чтобы исправить некоторые проблемы Mac).Вы можете избежать некоторого кода в этом скрипте, если вы используете bash 4.x - см. Закомментированный раздел с опцией --auto
и функцией docopt_print_ARGS
.В настоящее время вам потребуется bash 4.x, чтобы избежать исправления docopts.sh
.
#!/bin/bash
#
# foo.
#
# Usage:
# foo [options] <file>
# foo --help | --version
#
# Options:
# -t, --target <target> target.
# -o, --output <output> output.
# -h, --help print this help message.
# --version print the version.
#
# bash 3.2 (patched docopts.sh) - include set -x to see the args easily
source docopts.sh
usage=$(docopt_get_help_string "$0")
set -x
eval "$(docopts -G ARGS -V "$VERSION" -h "$usage" : "$@")"
# On bash 4.x, replace preceding section with this, or use -A instead of -G above
# source docopts.sh --auto "$@"
# docopt_print_ARGS
. Он анализирует раздел «Использование» и обрабатывает такие командные строки, как:
foo --target a -o b file1
foo --target a --output b file1
foo --target a file1
Частичный вывод с set -x
чтобы показать правильно обработанные аргументы:
$ ./foo --target a file1 --output b
...
++ ARGS_target=a
++ ARGS_output=b
++ ARGS_file=file1
++ ARGS_help=false
++ ARGS_version=false