Date:        Fri, 27 Aug 2021 15:05:52 +0000
    From:        nigelberlinguer via Bug reports for the GNU Bourne Again SHell 
<bug-bash@gnu.org>
    Message-ID:  
<0IgsinjPxg5VSubCxyc64u9axdDTEubUNcQFmIaPyduotl2CyQ9g71uoLtpmXL2hUph1_eHzVRnEZ7vyyHFKqqy3OlPydQXccd2CkHyzpjA=@protonmail.com>

  | I am trying to use getopts so one of the options can use
  | an optional argument.

getopts is required by POSIX to:

        The getopts utility shall retrieve options and option-arguments
        from a list of parameters. It shall support the Utility Syntax
        Guidelines 3 to 10, inclusive, described in XBD Section 12.2

XBD 12.2 guideline 7 is:

        Guideline 7: Option-arguments should not be optional.

That is, if you want to be able to give an option arg, or not give one,
those should be implemented as 2 separate options.

That said, getopts also:

        If an option-argument is missing:

            � If the first character of optstring is a <colon>,
              the shell variable specified by name shall be set to the
              <colon> character and the shell variable OPTARG shall be
              set to the option character found.

which means that you can do

        while getopts :abc:d var
        do
                case "${var}" in
                a)      .... ;;
                b)      .... ;;
                c)  carg=${OPTARG}; .... ;;
                d)      .... ;;
                :)  case "${OPTARG}" in
                    c) carg=Missing; .... ;;
                    *) usage ... ;;
                    esac
                ?)  usage Bad arg "${OPTARG}" ... ;;
                esac
        done

or something like that ... but beware that it only actually works
when the option that might have an arg is last in the args given, so
in the case above

                script -a -c

would do what you want, but

                script -c -a

would not, there "-a" is the arg to the -c option, not an option itself.
There is no way (certainly no portable way) around that.

kre



  • Handling op... nigelberlinguer via Bug reports for the GNU Bourne Again SHell
    • Re: Ha... Robert Elz
      • Ha... nigelberlinguer
        • ... Lawrence Velázquez
          • ... Kenneth Irving
      • Re... Robert Elz
        • ... nigelberlinguer
        • ... nigelberlinguer
        • ... hancooper
        • ... Robert Elz
          • ... hancooper

Reply via email to