Как передать параметры в getopts Bash, используя пользовательскую переменную, а не ${1}, ${2} и т. д.

Я хочу указать параметры (параметры и аргументы) в переменной Bash и передать эту переменную getopts для разбора вместо обычных переменных ${1}, ${2} и т.д. Я не уверен, как это сделать. Часто в документации дляgetopts, getopts синтаксис описывается следующим образом:

Syntax
    getopts optstring name [args]

я знаю это optstring представляет инструкции для getopts о том, как анализировать параметры и name переменная, которая предназначена для хранения текущей информации, рассматриваемой getopts (например, значение аргумента опции), но я не знаю, что [args] предназначен для. Это способ передачи параметров в getopts без использования стандартных переменных командной строки? Если это так, как я могу использовать это средство? Если это не так, что было бы хорошим способом передать аргументы, хранящиеся, скажем, в переменной Bash, разделенной пробелом, getopts? Спасибо!

1 ответ

Решение

Да, необязательный args аргументы - это способ передачи пользовательских параметров. Как сказано в руководстве:

Обычно getopts анализирует позиционные параметры, но если в аргументах указано больше аргументов, вместо этого getopts анализирует их.

Итак, если у вас есть массив:

myargs=(arg1 arg2 arg3)

ты можешь использовать:

getopts optstring name "${myargs[@]}"

обрабатывать их.

Пример:

$ # Set positional parameters:
$ set -- -a 1 -b
$ getopts a:b var -a 2
$ echo $var
a
$ echo $OPTARG
2

Как видите, он извлек значение из аргументов, которые я указал команде (2), а не позиционные параметры для оболочки (1)

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