BASH - опции включены в $ @ - PullRequest
0 голосов
/ 26 июня 2018

У меня есть скрипт, который обрабатывает файлы и может принимать несколько файловых аргументов:

sh remove_engine file1 #single arg

sh remove_engine file1 file2 #multiple file arg

В верхней части скрипта я собираю их вместе с $@, чтобы их зациклить.

Проблема в том, что я также собираюсь использовать опции (наряду с getopts) ...

sh remove_engine -ri file1 file2

... и $@ теперь возвращает

-rvi file1 file2

, а остальная часть сценария принимает -ri в качестве имени файла.

Также в верхней части скрипта у меня есть цикл while с getopts

while getopts :rvi opt
do
    case"$opt" in
    v)      verbose="true";;
    i)      interactive="true";;
    r)      recursive="true";;
   [?])     echo "Usage..."
            exit;;
    esac
done

Как мне разобрать параметры, а затем отделить аргументы от параметров?

1 Ответ

0 голосов
/ 26 июня 2018

С man bash:

Когда встречается конец опций, getopts завершается с возвращаемое значение больше нуля. OPTIND установлен в индекс первый необязательный аргумент, и name имеет значение ?.

Итак, полный код:

#!/bin/bash

while getopts :rvi opt; do
  case $opt in
    v) verbose=true ;;
    i) interactive=true ;;
    r) recursive=true ;;
    *) echo "Usage..."; exit 1 ;;
  esac
done

shift $((OPTIND-1))  # remove all the OPTIND-1 parsed arguments from "$@"

echo "$@"  # use the remaining arguments
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...