ettaluni
@ettaluni
ERROR MEME

Как реализовать парсинг параметров, введённых в произвольном порядке?

Доброго дня. Пишу свою функцию на bash но как реализовать свободный ввод параметров? ЧТобы я мог например вводить:
command --param1=1 --param2=2 --param3
command --param3=2 --param1 --param2=3

//и.т.п то есть ввод параметров в случайной последовательности
  • Вопрос задан
  • 62 просмотра
Решения вопроса 2
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Есть три способа
Просто сделать свой цикл, который бежит по всем аргументам
Второй - встроенный getopts
Третий - правильный getopt. Он умеет и в длинные и короткие опции.

Вот накидал правильный пример для getopt вроде как все как рекомендовано.
Указаны доступные короткая опция -h и длинные --help и --start, при этом --start требует дополнительного аргумента.

function usage {
  echo "        Syntax:"
  echo " $0 -h"
  echo " $0 --help"
  echo " $0 -start <environment>"
}
OPTSTR=$(getopt --name $0 --options h --longoptions help,start: -- $@)
[ $? -ne 0 ] && echo "ERROR: wrong option" && usage && exit 1
[ $# -eq 0 ] && echo "ERROR: no arguments" && usage && exit 1

eval set -- "${OPTSTR}"
# parse all arguments.
while true; do
  case "${1}" in
    -h|--help)  usage; exit 0;;
    --start) ENV="${2}"; shift 2;;
    --)         break;;
    *)          echo "ERROR: unknown"; usage; exit 1;;
  esac
done

echo "Starting program with environment: ${ENV}"
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xotkot
@xotkot
хорошо есть и хорошо весьма
https://devhints.io/bash
Getting options
while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
  -V | --version )
    echo $version
    exit
    ;;
  -s | --string )
    shift; string=$1
    ;;
  -f | --flag )
    flag=1
    ;;
esac; shift; done
if [[ "$1" == '--' ]]; then shift; fi

пример когда опции передаются в скрипт с параметром(-s | --string) и без(-V | --version и -f | --flag), правим под себя
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы