Як я можу отримати залишилися аргументи після витягування розібраних елементів за допомогою getopts?


14

Я хочу проаналізувати деякі аргументи до bash-скрипту за допомогою getopts, але хочу мати доступ до решти аргументів, які не включені до списку параметрів. Наприклад, якщо у мене є дзвінок:

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

Я мав би:

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

Який найпростіший спосіб отримати тут "інші аргументи", які повинні бути не оброблені getopts?

Відповіді:


17

вам потрібно зрушити, коли ви аналізуєте аргумент або ставите

shift $ ((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.