getopt1
Parse command options
Usage
args=`getopt optstring $*` ; errcode=$?; set -- $args
Overview
The getopt utility 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. The getopt utility 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.
Exit status
The getopt utility prints an error message on the standard error output and exits with status > 0 when it encounters an option letter not included in optstring.
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: $*`
# you should not use `getopt abo: "$@"` since that would parse
# the arguments differently from what the set command below does.
if [ $? -ne 0 ]; then
echo 'Usage: ...'
exit 2
fi
set -- $args
# You cannot use the set command with a backquoted getopt directly,
# since the exit code from getopt would be shadowed by those of set,
# which is zero by definition.
while :; do
case "$1" in
-a|-b)
echo "flag $1 set"; sflags="${1#-}$sflags"
shift
;;
-o)
echo "oarg is '$2'"; oarg="$2"
shift; shift
;;
--)
shift; break
;;
esac
done
echo "single-char flags: '$sflags'"
echo "oarg is '$oarg'"
This code will accept any of the following as equivalent:
cmd -aoarg file1 file2 cmd -a -o arg file1 file2 cmd -oarg -a file1 file2 cmd -a -oarg -- file1 file2
Releases
163 releases since Mac OS X 10.0; the text changed 2 times.