Parse positional parameters.
Break up the options in a command line (for easy parsing by shell procedure),
and check for legal options.
Syntax args=`getopt optstring $*` ; errcode=$?; set -- $args Options Optstring A string of recognized option letters either individual characters or characters followed by a colon to indicate an argument is to follow. e.g. an option string x recognizes an option "-x", and an option string x: recognizes an option and argument "-x argument". It does not matter if the argument has leading white space. -- This special option is used to delimit the end of the options. getopt will place `--' in the arguments at the end of the options, or recognize it if used explicitly. ($1 $2 ...) The shell arguments are reset so that each option is preceded by a `-' and in its own shell argument; each option argument is also in its own shell argument.
Examples
The following code fragment shows how one might process the arguments for
a command that can take the options -a and -b, and the option -o, which requires an argument.
args=`getopt abo: $*` # you should not use `getopt abo: "$@"` since that would parse # the arguments differently from what the set command below does. if [ $? != 0 ] then echo 'Usage: ...' exit 2 fi set -- $args # You cannot use the set command with a backquoted getopt directly, # since the exit code from getopt would be shadowed by those of set, # which is zero by definition. for i do case "$i" in -a|-b) echo flag $i set; sflags="${i#-}$sflags"; shift;; -o) echo oarg is "'"$2"'"; oarg="$2"; shift; shift;; --) shift; break;; esac done echo single-char flags: "'"$sflags"'" echo oarg is "'"$oarg"'" This code will accept any of the following as equivalent: cmd -aoarg file file cmd -a -o arg file file cmd -oarg -a file file cmd -a -oarg -- file file
“You spend a good piece of your life gripping a baseball and in the end it turns out that it was the other way around all the time” ~ Jim Bouton
Related macOS commands:
getopts - Parse positional parameters