Использование getopts в Bash - PullRequest
2 голосов
/ 18 октября 2019

Я хочу использовать getopts в скрипте Bash следующим образом:

while getopts ":hXX:h" opt; do
  case ${opt} in
    hXX ) Usage
      ;;
    h ) echo "You pressed Hey"
      ;;
    \? ) echo "Usage: cmd [-h] [-p]"
      ;;
  esac
done

Идея состоит в том, что я хочу иметь два флага -h или --help, чтобы позволить пользователю иметь возможность использоватьПОМОГИТЕ, чтобы узнать, как использовать скрипт и другой второй флаг, который начинается с h, но это похоже на -hxx, где x - что угодно.

Как я могу различить эти два, так как даже когда янажмите --hxx флаг, он автоматически выполняет флаг помощи. Я думаю, что порядок представления их в getopt не имеет к этому никакого отношения.

1 Ответ

1 голос
/ 18 октября 2019

Программа 'external' getopt (НЕ bash, встроенная в getopts) поддерживает '--longoptions'. Его можно использовать в качестве предварительного обработчика параметров командной строки, что позволяет использовать длинные параметры с помощью встроенного в bash getopt (или других программ, которые не поддерживают длинные параметры).

См. Использование getopts для обработки параметров длинной и короткой командной строки для получения более подробной информации.

#! /bin/bash

TEMP=$(getopt -l help -- h "$@")
eval set -- "$TEMP"
while getopts h-: opt ; do
        case "$opt" in
                h) echo "single" ;;
                -) case "$OPTARG" in
                        -help) echo "Double" ;;
                        *) echo "Multi: $OPTARG" ;;
                esac ;;
                *) echo "ERROR: $opt" ;;
        esac
done
...