It is easy, though tedious to pull options directly out of the
argv vector with your own routines. It is slightly less tedious
to use the standard C option-processing function getopt, or the
enhanced GNU version of the same function, getopt_long, which
permits GNU-style long options (for example, --quiet as
opposed to -q).
The best option of all is to use the argp interface for
processing options. Professionally written programs provide the user
with standard and useful options. The argp function provides for
these. For the modest price of setting up your command line arguments
in a structured way, and with surprisingly few lines of code, you can
obtain all the perks of a "real" GNU program, such as
"automagically"-generated output to the --help,
--usage, and --version options, as defined by the GNU
coding standards. Using argp results in a more consistent
look-and-feel for programs that use it, and makes it less likely that
the built-in documentation for a program will be wrong or out of date.
POSIX, the Portable Operating System Interface standard, recommends the
following conventions for command-line arguments. The argp
interface makes implementing them easy.
Command-line arguments are options if they begin with a hyphen (-).
Multiple options may follow a hyphen in a cluster if they do not take
arguments. Thus, -abc and -a -b -c are the same.
Option names are single alphanumeric characters.
Options may require an argument. For example, the -o option
of the ld command requires an output file name.
The whitespace separating an option and its argument is optional.
Thus, -o foo and -ofoo are the same.
Options usually precede non-option arguments. (In fact, argp is
more flexible than this; if you want to suppress this flexibility,
define the _POSIX_OPTION_ORDER environment variable.)
The argument -- terminates all options; all following command-line
arguments are considered non-option arguments, even if they begin with a hyphen.
A single hyphen as an argument is considered a non-option argument;
by convention, it is used to specify input from standard input or
output to standard output.
Options may appear in any order, even multiple times. The meaning
of this is left to the application.
In addition, GNU adds long options, like the --help,
--usage, and --version options mentioned above. A
long option starts with --, which is then followed by a string of
alphanumeric characters and hyphens. Option names are usually one to
three words long, with hyphens to separate words. Users can abbreviate
the option names as long as the abbreviations are unique. A long option
(such as --verbose) often has a short-option synonym (such as
-v).
Long options can accept optional (that is, non-necessary) arguments.
You can specify an argument for a long option as follows:
--option-name=value
You may not type whitespace between the option name and the equals sign,
or between the equals sign and the option value.