SH-ARG(1)                                               SH-ARG(1)

     NAME
          arg - shell command-line argument parsing

     SYNOPSIS
          load arg
          arg [ opts command ]...  - args

     DESCRIPTION
          Arg is a loadable module for sh(1) that parses command-line
          arguments in the same form as arg(2). It accepts a list of
          (opts, command) pairs, where each character in opts is an
          acceptable option, and command is a shell command to be run
          if any character in opts is found.  Any trailing plus (+)
          characters in opts cause arg to extract the same number of
          arguments associated with the option before running command.

          For the duration of command, the environment variable $opt
          will be set to the option that has been found, and $arg will
          be set to the option's arguments (if the correct number of
          arguments have been extracted; otherwise a message will be
          printed, and a usage exception raised).  The option charac-
          ter asterisk (*) matches any option letter (this must be
          quoted, to avoid the usual special interpretation by the
          shell).  Only one command will be run for any option found;
          if there is no matching option letter, then a default error
          message will be printed, and a usage exception raised.

          The list of option specifications is terminated with a sin-
          gle minus (-); the arguments to be parsed follow this.  When
          the argument parsing has finished the environment variable
          $* is set to the remaining list of arguments.

     EXAMPLE
          The following shell script, script, takes options b, c and
          f, where f takes a file name argument.
          #!/dis/sh
          load arg
          bflag := cflag := 0
          file  := ()
          args  := $*
          (arg
              bc  {$opt^flag = 1}
              f+  {file=$arg}
              r++++ {rect=$arg}
              '*' {echo unknown option $opt}
              - $args
          )
          echo $0 $bflag $cflag $file
          echo rect $rect
          echo arguments are $*

     Page 1                       Plan 9             (printed 3/29/24)

     SH-ARG(1)                                               SH-ARG(1)

          When invoked as follows:

               script -bc -r 0 10 50 100 -ffile a b c

          the output is:

               ./script 1 1 file
               rect 0 10 50 100
               arguments are a b c

          and when invoked by:

               script -b -f file -z -- -bc

          the output is:

               unknown option z
               ./script 1 0 file
               arguments are -bc

     SOURCE
          /appl/cmd/sh/arg.b

     SEE ALSO
          sh(1), arg(2), sh-std(1)

     Page 2                       Plan 9             (printed 3/29/24)