matejak / argbash

Bash argument parsing code generator
Other
1.4k stars 62 forks source link

Design better boolean arguments #14

Open matejak opened 7 years ago

matejak commented 7 years ago

Currently, the ARG_OPTIONAL_BOOL does not behave optimally (see #2 ). It seems to be a good idea to have more macros for switch-on, switch-off and both (as the current ARG_OPTIONAL_BOOL somehow attempts to). Currently, ARG_OPTIONAL_BOOL assumes that one wants to switch something on (using long and short option) and autogenerating long option to switch something off. This falls on its head when one wants to switch something off. Proposed behavior:

New macros would be introduced:

edannenberg commented 7 years ago

After re-reading, so the only point of ARG_OPTIONAL_BOOL generating the negating option is overriding a possible previous occurence in the current args?

I can see the code being a bit cleaner using the proposed ARG_OPTIONAL_SWITCH_XXX behavior, but maybe not that intuitive to use. I would probably expect ARG_OPTIONAL_SWITCH_OFF(no-video, v) resulting in a _arg_no_video var.

matejak commented 7 years ago

Good point, (any) code should read like a prose, so letting ARG_OPTIONAL_SWITCH_OFF(video, v) to create the --no-video option while saving the result to _arg_video should do the trick. There could be an option to set the prefix (default would be no-, people may be interested in disable- for --disable-video etc.).

0x5c commented 5 years ago

Hello! Is this still in the plans? The milestone is 2.7.0, but 2.8.0 got released a month ago. It's what would make argbash perfect for me.

matejak commented 5 years ago

Hello, yes, it is deffinitelly planned. Stay tuned for updates!

cconnert commented 1 year ago

@matejak: Hi, will this issue be resolved? Seems like you got pretty far on your draft. Thanks

ShamrockLee commented 9 months ago

It would also be very helpful to have a way to integrate with arithmetic condition (( expression )) in modern Bash, which returns successfully (status 0) when expression evaluates to nonzero, or else returns failure (status 1).

Something like ARG_OPTIONAL_BOOL_NUM, ARG_SWITCH_YES_NUM, ARG_SWITCH_NO_NUM would be great.

Here's the behavior of Bash arithmetic conditional construct:

$ if (( 1 )); then echo yes; else echo no; fi
yes
$ if (( 0 )); then echo yes; else echo no; fi
no
$ if (( "" )); then echo yes; else echo no; fi
no
$ if (( )); then echo yes; else echo no; fi
no
$ unset foo; if (( foo )); then echo yes; else echo no; fi
no
$ foo=2; if (( foo )); then echo yes; else echo no; fi
yes
$ foo=2; if (( $foo )); then echo yes; else echo no; fi
yes
$ foo=2; if (( "$foo" )); then echo yes; else echo no; fi
yes