NetBSD/usr.bin/getopt/getopt.1

123 lines
2.6 KiB
Groff
Raw Normal View History

2009-03-11 16:53:30 +03:00
.\" $NetBSD: getopt.1,v 1.17 2009/03/11 13:53:30 joerg Exp $
.Dd November 9, 2000
1993-06-21 16:43:56 +04:00
.Dt GETOPT 1
.Os
.Sh NAME
.Nm getopt
.Nd parse command options
.Sh SYNOPSIS
1997-10-19 06:13:39 +04:00
.Li args=\`getopt optstring $*\`
.Pp
.Li set \-\- \`getopt optstring $*\`
1993-06-21 16:43:56 +04:00
.Sh DESCRIPTION
1997-10-19 06:13:39 +04:00
.Nm
1993-06-21 16:43:56 +04:00
is used to break up options in command lines for easy parsing by
shell procedures, and to check for legal options.
.Op Optstring
is a string of recognized option letters (see
2001-07-06 22:13:35 +04:00
.Xr getopt 3 ) ;
1993-06-21 16:43:56 +04:00
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
.Dq \-\-
1993-06-21 16:43:56 +04:00
is used to delimit the end of the options.
1997-10-19 06:13:39 +04:00
.Nm
1993-06-21 16:43:56 +04:00
will place
.Dq \-\-
1993-06-21 16:43:56 +04:00
in the arguments at the end of the options,
or recognize it if used explicitly.
The shell arguments
2009-03-11 16:53:30 +03:00
.Pq Ev $1 , Ev $2 , ...
are reset so that each option is
1993-06-21 16:43:56 +04:00
preceded by a
.Dq \-
1993-06-21 16:43:56 +04:00
and in its own shell argument;
each option argument is also in its own shell argument.
2001-12-01 22:20:32 +03:00
.Sh EXAMPLES
1993-06-21 16:43:56 +04:00
The following code fragment shows how one might process the arguments
for a command that can take the options
.Op a
and
.Op b ,
and the option
1999-12-01 15:03:16 +03:00
.Op c ,
1993-06-21 16:43:56 +04:00
which requires an argument.
.Pp
.Bd -literal -offset indent
1999-12-01 15:03:16 +03:00
args=\`getopt abc: $*\`
if [ $? \-ne 0 ]; then
1993-06-21 16:43:56 +04:00
echo 'Usage: ...'
exit 2
fi
set \-\- $args
while [ $# \-gt 0 ]; do
case "$1" in
1993-06-21 16:43:56 +04:00
\-a|\-b)
flag=$1
1999-12-01 15:03:16 +03:00
;;
\-c)
carg=$2; shift
1999-12-01 15:03:16 +03:00
;;
1993-06-21 16:43:56 +04:00
\-\-)
shift; break
1999-12-01 15:03:16 +03:00
;;
1993-06-21 16:43:56 +04:00
esac
shift
1993-06-21 16:43:56 +04:00
done
.Ed
.Pp
This code will accept any of the following as equivalent:
.Pp
.Bd -literal -offset indent
1999-12-01 15:03:16 +03:00
cmd \-acarg file file
cmd \-a \-c arg file file
cmd \-carg -a file file
cmd \-a \-carg \-\- file file
1993-06-21 16:43:56 +04:00
.Ed
.Pp
.St -p1003.2
2001-12-01 19:43:07 +03:00
mandates that the
1997-10-19 06:13:39 +04:00
.Xr sh 1
2002-09-30 15:08:56 +04:00
set command return the value of 0 for the exit status.
Therefore, the exit status of the
1997-10-19 06:13:39 +04:00
.Nm
command is lost when
1997-10-19 06:13:39 +04:00
.Nm
and the
1997-10-19 06:13:39 +04:00
.Xr sh 1
2002-09-30 15:08:56 +04:00
set command are used on the same line.
The example given is one way to detect errors found by
.Nm .
1993-06-21 16:43:56 +04:00
.Sh DIAGNOSTICS
1997-10-19 06:13:39 +04:00
.Nm
1993-06-21 16:43:56 +04:00
prints an error message on the standard error output when it
encounters an option letter not included in
.Op optstring .
2001-12-01 22:20:32 +03:00
.Sh SEE ALSO
.Xr sh 1 ,
.Xr getopt 3
1993-06-21 16:43:56 +04:00
.Sh HISTORY
Written by Henry Spencer, working from a Bell Labs manual page.
Behavior believed identical to the Bell version.
.Sh BUGS
Whatever
.Xr getopt 3
has.
.Pp
1994-01-11 05:21:43 +03:00
Arguments containing white space or embedded shell metacharacters
1993-06-21 16:43:56 +04:00
generally will not survive intact; this looks easy to fix but isn't.
.Pp
The error message for an invalid option is identified as coming
from
1997-10-19 06:13:39 +04:00
.Nm
1993-06-21 16:43:56 +04:00
rather than from the shell procedure containing the invocation
of
.Nm ;
1993-06-21 16:43:56 +04:00
this again is hard to fix.
.Pp
The precise best way to use the
1997-10-19 06:13:39 +04:00
.Ic set
1993-06-21 16:43:56 +04:00
command to set the arguments without disrupting the value(s) of
1997-10-19 06:13:39 +04:00
shell options varies from one shell version to another.