Parse positional parameters.
Break up the options in a command line (for easy parsing by shell procedure), and check for legal options.

      args=`getopt optstring $*` ; errcode=$?; set -- $args

   Optstring  A string of recognized option letters 
              either individual characters or characters followed by a colon 
              to indicate an argument is to follow.
              e.g. an option string  x recognizes an option "-x",
              and an option string  x: recognizes an option and argument "-x argument".
              It does not matter if the argument has leading white space.

   --        This 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. 

($1 $2 ...)   The shell arguments  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.


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 [ $? != 0 ]
       echo 'Usage: ...'
       exit 2
     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.
     for i
       case "$i"
           echo flag $i set; sflags="${i#-}$sflags";
           echo oarg is "'"$2"'"; oarg="$2"; shift;
           shift; break;;
     echo single-char flags: "'"$sflags"'"
     echo oarg is "'"$oarg"'"

     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

“You spend a good piece of your life gripping a baseball and in the end it turns out that it was the other way around all the time” ~ Jim Bouton

Related macOS commands

getopts - Parse positional parameters.

Copyright © 1999-2024
Some rights reserved