| .TH GETOPT 1 "May 31, 1997" Linux "" |
| .SH NAME |
| getopt \- parse command options (enhanced) |
| .SH SYNOPSIS |
| .B getopt |
| .I optstring parameters |
| .br |
| .B getopt |
| .RI [ options ] |
| .RB [ \-\- ] |
| .I optstring parameters |
| .br |
| .B getopt |
| .RI [ options ] |
| .BR \-o | \-\-options |
| .I optstring |
| .RI [ options ] |
| .RB [ \-\- ] |
| .I parameters |
| .SH DESCRIPTION |
| .B getopt |
| is used to break up |
| .RI ( parse ) |
| options in command lines for easy parsing by |
| shell procedures, and to check for legal options. |
| It uses the |
| .SM GNU |
| .BR getopt (3) |
| routines to do this. |
| |
| The parameters |
| .B getopt |
| is called with can be divided into two parts: options |
| which modify the way getopt will parse |
| .RI ( options |
| and |
| .BR \-o | \-\-options |
| .I optstring |
| in the |
| .BR SYNOPSIS ), |
| and the parameters which are to be |
| parsed |
| .RI ( parameters |
| in the |
| .BR SYNOPSIS ). |
| The second part will start at the first non\-option parameter |
| that is not an option argument, or after the first occurrence of |
| .RB ` \-\- '. |
| If no |
| .RB ` \-o ' |
| or |
| .RB ` \-\-options ' |
| option is found in the first part, the first |
| parameter of the second part is used as the short options string. |
| |
| If the environment variable |
| .B GETOPT_COMPATIBLE |
| is set, or if its first parameter |
| is not an option (does not start with a |
| .RB ` \- ', |
| this is the first format in the |
| .BR SYNOPSIS), |
| .B getopt |
| will generate output that is compatible with that of other versions of |
| .BR getopt (1). |
| It will still do parameter shuffling and recognize optional |
| arguments (see section |
| .B COMPATIBILITY |
| for more information). |
| |
| Traditional implementations of |
| .BR getopt (1) |
| are unable to cope with whitespace and other (shell\-specific) special characters |
| in arguments and non\-option parameters. To solve this problem, this |
| implementation can generate |
| quoted output which must once again be interpreted by the shell (usually |
| by using the |
| .B eval |
| command). This has the effect of preserving those characters, but |
| you must call |
| .B getopt |
| in a way that is no longer compatible with other versions (the second |
| or third format in the |
| .BR SYNOPSIS ). |
| To determine whether this enhanced version of |
| .BR getopt (1) |
| is installed, a special test option |
| .RB ( \-T ) |
| can be used. |
| .SH OPTIONS |
| .TP |
| .BR \-a , " \-\-alternative" |
| Allow long options to start with a single |
| .RB ` \- '. |
| .TP |
| .BR \-h , " \-\-help" |
| Output a small usage guide and exit successfully. No other output is generated. |
| .TP |
| .BR \-l , " \-\-longoptions \fIlongopts\fP" |
| The long (multi\-character) options to be recognized. |
| More than one option name |
| may be specified at once, by separating the names with commas. This option |
| may be given more than once, the |
| .I longopts |
| are cumulative. |
| Each long option name |
| in |
| .I longopts |
| may be followed by one colon to indicate it has a required argument, and by two colons to indicate it has an optional argument. |
| .TP |
| .BR \-n , " \-\-name \fIprogname\fP" |
| The name that will be used by the |
| .BR getopt (3) |
| routines when it reports errors. Note that errors of |
| .BR getopt (1) |
| are still reported as coming from getopt. |
| .TP |
| .BR \-o , " \-\-options \fIshortopts\fP" |
| The short (one\-character) options to be recognized. If this option is not |
| found, the first parameter of |
| .B getopt |
| that does not start with |
| a |
| .RB ` \- ' |
| (and is not an option argument) is used as the short options string. |
| Each short option character |
| in |
| .I shortopts |
| may be followed by one colon to indicate it has a required argument, |
| and by two colons to indicate it has an optional argument. |
| The first character of shortopts may be |
| .RB ` + ' |
| or |
| .RB ` \- ' |
| to influence the way |
| options are parsed and output is generated (see section |
| .B SCANNING MODES |
| for details). |
| .TP |
| .BR \-q , " \-\-quiet" |
| Disable error reporting by getopt(3). |
| .TP |
| .BR \-Q , " \-\-quiet\-output" |
| Do not generate normal output. Errors are still reported by |
| .BR getopt (3), |
| unless you also use |
| .IR \-q . |
| .TP |
| .BR \-s , " \-\-shell \fIshell\fP" |
| Set quoting conventions to those of shell. If no \-s argument is found, |
| the |
| .SM BASH |
| conventions are used. Valid arguments are currently |
| .RB ` sh ' |
| .RB ` bash ', |
| .RB ` csh ', |
| and |
| .RB ` tcsh '. |
| .TP |
| .BR \-u , " \-\-unquoted" |
| Do not quote the output. Note that whitespace and special (shell\-dependent) |
| characters can cause havoc in this mode (like they do with other |
| .BR getopt (1) |
| implementations). |
| .TP |
| .BR \-T , " \-\-test" |
| Test if your |
| .BR getopt (1) |
| is this enhanced version or an old version. This generates no output, |
| and sets the error status to 4. Other implementations of |
| .BR getopt (1), |
| and this version if the environment variable |
| .B GETOPT_COMPATIBLE |
| is set, |
| will return |
| .RB ` \-\- ' |
| and error status 0. |
| .TP |
| .BR \-V , " \-\-version" |
| Output version information and exit successfully. No other output is generated. |
| .SH PARSING |
| This section specifies the format of the second part of the parameters of |
| .B getopt |
| (the |
| .I parameters |
| in the |
| .BR SYNOPSIS ). |
| The next section |
| .RB ( OUTPUT ) |
| describes the output that is |
| generated. These parameters were typically the parameters a shell function |
| was called with. |
| Care must be taken that each parameter the shell function was |
| called with corresponds to exactly one parameter in the parameter list of |
| .B getopt |
| (see the |
| .BR EXAMPLES ). |
| All parsing is done by the GNU |
| .BR getopt (3) |
| routines. |
| |
| The parameters are parsed from left to right. Each parameter is classified as a |
| short option, a long option, an argument to an option, |
| or a non\-option parameter. |
| |
| A simple short option is a |
| .RB ` \- ' |
| followed by a short option character. If |
| the option has a required argument, it may be written directly after the option |
| character or as the next parameter (ie. separated by whitespace on the |
| command line). If the |
| option has an optional argument, it must be written directly after the |
| option character if present. |
| |
| It is possible to specify several short options after one |
| .RB ` \- ', |
| as long as all (except possibly the last) do not have required or optional |
| arguments. |
| |
| A long option normally begins with |
| .RB ` \-\- ' |
| followed by the long option name. |
| If the option has a required argument, it may be written directly after |
| the long option name, separated by |
| .RB ` = ', |
| or as the next argument (ie. separated by whitespace on the command line). |
| If the option has an optional argument, it must |
| be written directly after the long option name, separated by |
| .RB ` = ', |
| if present (if you add the |
| .RB ` = ' |
| but nothing behind it, it is interpreted |
| as if no argument was present; this is a slight bug, see the |
| .BR BUGS ). |
| Long options may be abbreviated, as long as the abbreviation is not |
| ambiguous. |
| |
| Each parameter not starting with a |
| .RB ` \- ', |
| and not a required argument of |
| a previous option, is a non\-option parameter. Each parameter after |
| a |
| .RB ` \-\- ' |
| parameter is always interpreted as a non\-option parameter. |
| If the environment variable |
| .B POSIXLY_CORRECT |
| is set, or if the short |
| option string started with a |
| .RB ` + ', |
| all remaining parameters are interpreted |
| as non\-option parameters as soon as the first non\-option parameter is |
| found. |
| .SH OUTPUT |
| Output is generated for each element described in the previous section. |
| Output is done |
| in the same order as the elements are specified in the input, except |
| for non\-option parameters. Output can be done in |
| .I compatible |
| .RI ( unquoted ) |
| mode, or in such way that whitespace and other special characters within |
| arguments and non\-option parameters are preserved (see |
| .BR QUOTING ). |
| When the output is processed in the shell script, it will seem to be |
| composed of distinct elements that can be processed one by one (by using the |
| shift command in most shell languages). This is imperfect in unquoted mode, |
| as elements can be split at unexpected places if they contain whitespace |
| or special characters. |
| |
| If there are problems parsing the parameters, for example because a |
| required argument is not found or an option is not recognized, an error |
| will be reported on stderr, there will be no output for the offending |
| element, and a non\-zero error status is returned. |
| |
| For a short option, a single |
| .RB ` \- ' |
| and the option character are generated |
| as one parameter. If the option has an argument, the next |
| parameter will be the argument. If the option takes an optional argument, |
| but none was found, the next parameter will be generated but be empty in |
| quoting mode, |
| but no second parameter will be generated in unquoted (compatible) mode. |
| Note that many other |
| .BR getopt (1) |
| implementations do not support optional arguments. |
| |
| If several short options were specified after a single |
| .RB ` \- ', |
| each will be present in the output as a separate parameter. |
| |
| For a long option, |
| .RB ` \-\- ' |
| and the full option name are generated as one |
| parameter. This is done regardless whether the option was abbreviated or |
| specified with a single |
| .RB ` \- ' |
| in the input. Arguments are handled as with short options. |
| |
| Normally, no non\-option parameters output is generated until all options |
| and their arguments have been generated. Then |
| .RB ` \-\- ' |
| is generated as a |
| single parameter, and after it the non\-option parameters in the order |
| they were found, each as a separate parameter. |
| Only if the first character of the short options string was a |
| .RB ` \- ', |
| non\-option parameter output is generated at the place they are found in the |
| input (this is not supported if the first format of the |
| .B SYNOPSIS |
| is used; in that case all preceding occurrences of |
| .RB ` \- ' |
| and |
| .RB ` + ' |
| are ignored). |
| .SH QUOTING |
| In compatible mode, whitespace or 'special' characters in arguments or |
| non\-option parameters are not handled correctly. As the output is |
| fed to the shell script, the script does not know how it is supposed to break |
| the output into separate parameters. To circumvent this |
| problem, this implementation offers quoting. The idea is that output |
| is generated with quotes around each parameter. When this output is once |
| again fed to the shell (usually by a shell |
| .B eval |
| command), it is split correctly into separate parameters. |
| |
| Quoting is not enabled if the environment variable |
| .B GETOPT_COMPATIBLE |
| is set, if the first form of the |
| .B SYNOPSIS |
| is used, or if the option |
| .RB ` \-u ' |
| is found. |
| |
| Different shells use different quoting conventions. You can use the |
| .RB ` \-s ' |
| option to select the shell you are using. The following shells are |
| currently supported: |
| .RB ` sh ', |
| .RB ` bash ', |
| .RB ` csh ' |
| and |
| .RB ` tcsh '. |
| Actually, only two `flavors' are distinguished: sh\-like quoting conventions |
| and csh\-like quoting conventions. Chances are that if you use another shell |
| script language, one of these flavors can still be used. |
| |
| .SH "SCANNING MODES" |
| The first character of the short options string may be a |
| .RB ` \- ' |
| or a |
| .RB ` + ' |
| to indicate a special scanning mode. If the first calling form |
| in the |
| .B SYNOPSIS |
| is used they are ignored; the environment variable |
| .B POSIXLY_CORRECT |
| is still examined, though. |
| |
| If the first character is |
| .RB ` + ', |
| or if the environment variable |
| .B POSIXLY_CORRECT |
| is set, parsing stops as soon as the first non\-option parameter |
| (ie. a parameter that does not start with a |
| .RB ` \- ') |
| is found that |
| is not an option argument. The remaining parameters are all interpreted as |
| non\-option parameters. |
| |
| If the first character is a |
| .RB ` \- ', |
| non\-option parameters are outputted at the place where they are found; in normal |
| operation, they are all collected at the end of output after a |
| .RB ` \-\- ' |
| parameter has been generated. Note that this |
| .RB ` \-\- ' |
| parameter is still generated, but it will always be the last parameter in |
| this mode. |
| .SH COMPATIBILITY |
| This version of |
| .BR getopt (1) |
| is written to be as compatible as possible to |
| other versions. Usually you can just replace them with this version |
| without any modifications, and with some advantages. |
| |
| If the first character of the first parameter of getopt is not a |
| .RB ` \- ', |
| getopt goes into compatibility mode. It will interpret its first parameter as |
| the string of short options, and all other arguments will be parsed. It |
| will still do parameter shuffling (ie. all non\-option parameters are outputted |
| at the end), unless the environment variable |
| .B POSIXLY_CORRECT |
| is set. |
| |
| The environment variable |
| .B GETOPT_COMPATIBLE |
| forces |
| .B getopt |
| into compatibility mode. Setting both this environment variable and |
| .B POSIXLY_CORRECT |
| offers 100% compatibility for `difficult' programs. Usually, though, |
| neither is needed. |
| |
| In compatibility mode, leading |
| .RB ` \- ' |
| and |
| .RB ` + ' |
| characters in the short options string are ignored. |
| .SH RETURN CODES |
| .B getopt |
| returns error code |
| .B 0 |
| for successful parsing, |
| .B 1 |
| if |
| .BR getopt (3) |
| returns errors, |
| .B 2 |
| if it does not understand its own parameters, |
| .B 3 |
| if an internal error occurs like out\-of\-memory, and |
| .B 4 |
| if it is called with |
| .BR \-T . |
| .SH EXAMPLES |
| Example scripts for (ba)sh and (t)csh are provided with the |
| .BR getopt (1) |
| distribution, and are optionally installed in |
| .BR /usr/share/getopt . |
| |
| .SH ENVIRONMENT |
| .IP POSIXLY_CORRECT |
| This environment variable is examined by the |
| .BR getopt (3) |
| routines. |
| If it is set, parsing stops as soon as a parameter |
| is found that is not an option or an option argument. All remaining |
| parameters are also interpreted as non\-option parameters, regardless |
| whether they start with a |
| .RB ` \- '. |
| .IP GETOPT_COMPATIBLE |
| Forces |
| .B getopt |
| to use the first calling format as specified in the |
| .BR SYNOPSIS . |
| .SH BUGS |
| .BR getopt (3) |
| can parse long options with optional arguments that are given an empty optional |
| argument (but can not do this for short options). This |
| .BR getopt (1) |
| treats optional arguments that are empty as if they were not present. |
| |
| The syntax if you do not want any short option variables at all is |
| not very intuitive (you have to set them explicitly to the empty |
| string). |
| |
| .SH AUTHOR |
| Frodo Looijaard <frodo@frodo.looijaard.name> |
| .SH "SEE ALSO" |
| .BR getopt (3), |
| .BR bash (1), |
| .BR tcsh (1). |
| .SH AVAILABILITY |
| The getopt command is part of the util-linux-ng package and is available from |
| ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/. |