GETOPT(1)

GETOPT(1) | General Commands Manual | GETOPT(1)

# NAME

`getopt` —
parse command options

# SYNOPSIS

`args=`getopt optstring $*``

`set -- `getopt optstring $*``

# DESCRIPTION

`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 white space. 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.

`getopt` should not be used in new scripts; use the shell builtin `getopts` instead.

# 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 [c], which requires an argument.

    args=`getopt abc: $*`
    if [ $? -ne 0 ]; then
    	echo 'Usage: ...'
    	exit 2
    fi
    set -- $args
    while [ $# -gt 0 ]; do
    	case "$1" in
    		-a|-b)
    			flag=$1
    			;;
    		-c)
    			carg=$2; shift
    			;;
    		--)
    			shift; break
    			;;
    	esac
    	shift
    done

This code will accept any of the following as equivalent:

    cmd -acarg file file
    cmd -a -c arg file file
    cmd -carg -a file file
    cmd -a -carg -- file file

IEEE Std 1003.2 (“POSIX.2”) mandates that the sh(1) set command return the value of 0 for the exit status. Therefore, the exit status of the `getopt` command is lost when `getopt` and the sh(1) set command are used on the same line. The example given is one way to detect errors found by `getopt`.

# DIAGNOSTICS

`getopt` prints an error message on the standard error output when it encounters an option letter not included in [optstring].

# SEE ALSO

sh(1), getopt(3)

# HISTORY

Written by Henry Spencer, working from a Bell Labs manual page. Behavior believed identical to the Bell version.

# BUGS

Whatever getopt(3) has.

Arguments containing white space or embedded shell metacharacters generally will not survive intact; this looks easy to fix but isn't.

The error message for an invalid option is identified as coming from `getopt` rather than from the shell procedure containing the invocation of `getopt`; this again is hard to fix.

The precise best way to use the `set` command to set the arguments without disrupting the value(s) of shell options varies from one shell version to another.

November 28, 2009 | NetBSD 10.1