Question

I want to specify parameters (options and arguments) in a Bash variable and to pass that variable to getopts for parsing instead of the usual variables ${1}, ${2} etc. I am not sure how to do this. Often in documentation for getopts, the getopts syntax is described as follows:

Syntax
    getopts optstring name [args]

I know that optstring represents instructions for getopts on how to parse parameters and name is a variable that is to store current information under consideration by getopts (such as the value of an option's argument), but I do not know what [args] is intended to be. Is it a way to pass parameters to getopts without using the standard command line variables? If it is, how could I use this facility? If it is not, what would be a good way to pass arguments stored in, say, a space-delimited Bash variable to getopts?

Was it helpful?

Solution

Yes, the optional args arguments are a way to pass custom parameters. As it says in the manual:

getopts normally parses the positional parameters, but if more arguments are given in args, getopts parses those instead.

So if you have an array:

myargs=(arg1 arg2 arg3)

you can use:

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

to process them.

Example:

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

As you can see, it retrieved the value from the args I supplied to the command (2), not the positional parameters to the shell (1)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top