Как я могу получить оставшиеся аргументы после извлечения разобранных предметов с помощью getopts?


14

Я хочу проанализировать некоторые аргументы скрипта bash, используя getopts, но хочу иметь возможность доступа к остальным аргументам, которые не включены в список опций. Так, например, если у меня есть звонок:

% script -a -b param -c param -d other arguments here

Я бы:

while getopts "ab:c:d" opt ; do
.
done

Какой самый простой способ получить «другие аргументы», которые не должны обрабатываться getopts?

Ответы:


17

вам нужно сдвигаться, когда вы разбираете arg, или ставите

сдвиньте $ ((OPTIND -1)) после того, как вы закончили синтаксический анализ, затем действуйте обычным способом, например

while getopts "ab:c:d" opt ; do
.
done
shift $(expr $OPTIND - 1 )

while test $# -gt 0; do
  echo $1
  shift
done

1
Стоит пояснить, что $ OPTIND - это индекс следующей опции, которая будет рассматриваться после запуска каждого getopts. Следовательно, $ * содержит 3 параметра, после первого действительного вызова - 2, а второго - 3. Если вызов недействителен, он выпадет с более ранним значением. Поэтому, если параметр 1 недействителен, OPTIND будет равен 1 (следовательно, приведенный выше пример будет shift $(expr 1 - 1)безопасным.
sibaz

0

В конце синтаксического анализа, как только вы сдвинули переменную $ @, в конце строки находится:

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.