---
name: "getopt"
section: "1"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["linux", "freebsd", "openbsd", "macos"]
url: "https://new.carta.tech/getopt"
---

# getopt(1)

parse command options

## NAME

**getopt** – parse command options

## SYNOPSIS

**getopt** *optstring* *$\**

## DESCRIPTION

The **getopt** utility cannot handle option arguments containing whitespace; consider using the standard **getopts** shell built-in instead.

**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)](/getopt/3.md)); 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 whitespace. However, if a letter is followed by two colons, the argument is optional and may not be separated by whitespace - this is an extension not covered by POSIX. 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.

## 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 **-o**, which requires an argument.

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

This code will accept any of the following as equivalent:

```
cmd -aoarg file file
cmd -a -o arg file file
cmd -oarg -a file file
cmd -a -oarg -- file file
```

## 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)](/sh/1.md), [getopt(3)](/getopt/3.md)

## HISTORY

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

## CAVEATS

Note that the construction

```
set -- `getopt optstring $*`
```

is not recommended, as the exit value from **set** will prevent the exit value from **getopt** from being determined.

## BUGS

Whatever [getopt(3)](/getopt/3.md) has.

Arguments containing whitespace 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.
