getopt1
Parse command options
Usage
getopt optstring
$*
Overview
The getopt utility cannot handle option arguments containing whitespace; consider using the standard getopts shell built-in instead.
getopt is used to break up options in command lines for easy parsing by shell procedures, and to check for legal options. optstring is a string of recognized option letters (see getopt(3)); if a letter is followed by a colon, the option is expected to have an argument which may or may not be separated from it by whitespace. However, if a letter is followed by two colons, the argument is optional and may not be separated by whitespace - this is an extension not covered by POSIX. The 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. The shell arguments ($1, $2, ...) 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: $*` if [ $? -ne 0 ] then echo 'Usage: ...' exit 2 fi set -- $args while [ $# -ne 0 ] do case "$1" in -a|-b) flag="$1"; shift;; -o) oarg="$2"; shift; shift;; --) shift; break;; esac done
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
Diagnostics
getopt prints an error message on the standard error output when it encounters an option letter not included in optstring.
Caveats
Note that the construction
set -- `getopt optstring $*`
is not recommended, as the exit value from set will prevent the exit value from getopt from being determined.
Releases
61 releases since OpenBSD 2.1; the text changed 13 times.