GETOPT(1) | User Commands | GETOPT(1) |
set -- ` getopt optstring $ * `
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(3C). 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 white space. The special option - is used to delimit the end of the options. If it is used explicitly, getopt recognizes it; otherwise, getopt generates it; in either case, getopt places it at the end of the options. The positional parameters ($1 $2 ...) of the shell are reset so that each option is preceded by a − and is in its own positional parameter; each option argument is also parsed into its own positional parameter.
The following code fragment shows how one might process the arguments for a command that can take the options -a or -b, as well as the option -o, which requires an argument:
set -- `getopt abo: $*` if [ $? != 0 ] then echo $USAGE exit 2 fi for i in $* do case $i in -a | -b) FLAG=$i; shift;; -o) OARG=$2; shift 2;; --) shift; break;; esac done
This code accepts any of the following as equivalent:
cmd -aoarg filename1 filename2 cmd -a -o arg filename1 filename2 cmd -oarg -a filename1 filename2 cmd -a -oarg -- filename1 filename2
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
CSI | enabled |
getopt does not support the part of Rule 8 of the command syntax standard (see Intro(1)) that permits groups of option-arguments following an option to be separated by white space and quoted. For example,
cmd -a -b -o "xxx z yy" filename
is not handled correctly. To correct this deficiency, use the getopts command in place of getopt.
If an option that takes an option-argument is followed by a value that is the same as one of the options listed in optstring (referring to the earlier EXAMPLES section, but using the following command line:
cmd -o -a filename
getopt always treats it as an option-argument to -o; it never recognizes -a as an option. For this case, the for loop in the example shifts past the filename argument.
June 1, 2022 | OmniOS |