In the last episode (Sep 25), Matthew Emmerton said:
> Maybe I'm missing something huge, but getopt(1,3) aren't working the
> way I think they should.
> 
> gabby# getopt k:s: -k -s
>  -k -s --
> gabby#
> 
> Wha?  Neither of these options specified arguments!  I guess you
> could consider that -k's argument was '-s', but I was pretty sure
> that an option's argument couldn't start with a dash character (to
> avoid the ambiguity that I'm hitting right now.)

But then how could you specify a filename argument that starts with a
dash?  If you accept that arguments can start with dashes there is no
ambiguity.
 
> I'm pretty sure I'm the one that's confused (not getopt), since I get
> the same behaviour on -STABLE and -CURRENT.  Can someone tell me how
> to accomplish what I want to do?  Basically, I want this:
> 
> gabby# getopt k:s: -k arg1 -s
> getopt: option requires an argument -- k
>  -k arg1 --

You mean "-- s" here I suppose, since -k does have an argument.  getopt
does this already.

> gabby# getopt k:s: -k -s arg2
> getopt: option requires an argument -- k
>  -s arg2 --
> gabby#

You'll just have to catch that in your switch-processing code, and
print an error if you get an argument that starts with a dash.

case $i in 
  -s )
    case $2 in 
      -* )
        echo "getopt: option requires an argument -- $i" ; exit 1 ;;
    esac
    flag_s=$2
    shift; shift ;;
  ...
esac
        
-- 
        Dan Nelson
        [EMAIL PROTECTED]

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to