[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Handling options with optional arguments with getopts
From: |
Robert Elz |
Subject: |
Re: Handling options with optional arguments with getopts |
Date: |
Fri, 27 Aug 2021 23:02:59 +0700 |
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 options with optional arguments with getopts, nigelberlinguer, 2021/08/27
- Re: Handling options with optional arguments with getopts,
Robert Elz <=
- Re: Handling options with optional arguments with getopts, Robert Elz, 2021/08/27
- Handling options with optional arguments with getopts, nigelberlinguer, 2021/08/27
- Handling options with optional arguments with getopts, nigelberlinguer, 2021/08/27
- Handling options with optional arguments with getopts, hancooper, 2021/08/28
- Re: Handling options with optional arguments with getopts, Robert Elz, 2021/08/28
- Handling options with optional arguments with getopts, hancooper, 2021/08/28