Bash Getopt принимает несколько параметров

Я пишу скрипт, использующий getopt для анализа длинных и коротких параметров. Решение, которое я имею до сих пор, принимает только один параметр. Есть ли способ заставить это решение принимать несколько параметров (например, "THING" и "COMIC" в примере)?

код:

function usage {
  printf "Usage: %s: [-abh c <URL>] [--ape --bean --comic <URL> --help]" >&2
  exit 2
}

set -- $(getopt -n$0 -u -a --longoptions="ape bean comic: help" "abc:h" "$@") || usage
[ "$#" -eq 0 ] && usage

while [ "$#" -gt 0 ];do
case "$1" in
  # Long options
  --ape)   THING='ape';shift;;
  --bean)  THING='bean';shift;;
  --comic) COMIC='yes';COMIC_URL="$2";shift;;
  --help)  usage;break;;
  -a)      THING='ape';shift;;
  -b)      THING='bean';shift;;
  -c)      COMIC='yes';COMIC_URL="$2";shift;;
  -h)      usage;break;;
  --)      shift;break;;
  -*)      usage;;
  *)       break;;
esac
shift
done

if [ ! -z $THING ]; then
  echo "THING:$THING"
fi

if [ $COMIC == 'yes' ]; then
  $BROWSER $COMIC_URL || echo "Sorry, could not find your comic!"
fi

1 ответ

Решение

Могут быть и другие проблемы, но я сразу вижу, что вы пишете:

--ape)   THING='ape';shift;;

(и аналогично для других случаев), а затем выполните:

shift

после того, как дело сделано. Это означает, что в случае --ape и во многих других случаях вы shiftвдвоем.

Просто удалите shift внутри случаев и сделать смену один раз и для каждого случая после esac,

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