Как распознать только полные параметры из getopt в скрипте Bash

Я пишу сценарий Bash для анализа параметров командной строки, а затем выполняю нужную функцию.

#!/bin/bash

TEMP=`getopt --longoptions help --options h --name 'script.sh' -- "$@"`

if [ $? != 0 ] ; then
  echo "Try 'script.sh --help' for more information." >&2 ;
  exit 1 ;
fi

eval set -- "$TEMP"

while true ; do
  case "$1" in
    -h|--help)
      echo "Usage:";
      exit 0;;
    --)
      shift ;
      break ;;
    *)
      echo "Internal error!" ;
      exit 1 ;;
  esac
done

echo "Remaining arguments:"
for arg do
  echo '--> '"'$arg'" ;
done

./script.sh -- выводит

Remaining arguments:

Все из

  • ./script.sh --h
  • ./script.sh --he
  • ./script.sh --hel
  • ./script.sh --help

выход

Usage:

и ./script.sh --helps выходы

script.sh: unrecognized option '--helps'
Try 'script.sh --help' for more information.

Как сделать так, чтобы усеченные параметры не распознавались как полный вариант? Я не могу найти ничего похожего на «конец строки» в шаблонах Bash. Почему -- не определяется как начало --help?

1
задан 19 September 2019 в 07:43

2 ответа

От человека getopt:

Долгие опции могут быть сокращены, пока сокращение не неоднозначно.

Таким образом, пока сокращение не неоднозначно, оно будет сокращено. Вы могли добавить некоторую другую опцию сделать это неоднозначным:

TEMP=`getopt --longoptions help helpx --options h --name 'script.sh' -- "$@"`

Даст Вам что-то как:

./script.sh    --he
script.sh: option '--he' is ambiguous; possibilities: '--help' '--helpx'
Try 'script.sh --help' for more information.
0
ответ дан 7 December 2019 в 18:43

вместо опций дескриптора более универсальным способом необходимо заботиться о тех опциях, которыми Вы интересуетесь

for i in "$@"; do
    case $i in
        -h|--help)
            echo "usage"
            exit 0
            ;;
        --one|--two|--tree)
            continue
            ;;
        *)
            echo "error"
            exit 1
            ;;
    esac
done
0
ответ дан 7 December 2019 в 18:43

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

Похожие вопросы: