Skip to content

Unexpected behavior with default true booleans #51

Open

Description

@theanine

Test program here:

FLAGS "$@" || exit $?
eval set -- "${FLAGS_ARGV}"
if [ ${FLAGS_foo} -eq ${FLAGS_TRUE} ]; then
	echo "true"
else
	echo "false"
fi

With:

DEFINE_boolean foo false "bar" "f"

Output (as expected):

$ foo-test.sh
false
$ foo-test.sh -f
true
$ foo-test.sh --nof
false
$ foo-test.sh --foo
true
$ foo-test.sh --nofoo
false

With:

DEFINE_boolean foo true "bar" "f"

Output (unexpected):

$ foo-test.sh
true
$ foo-test.sh -f
false
$ foo-test.sh --nof
false
$ foo-test.sh --foo
true
$ foo-test.sh --nofoo
false

If it's not obvious from the above output, the part that is unexpected is the output of foo-test.sh -f

Activity

  1. kward commented on Apr 13, 2020

    @kward
    Owner

    I agree, that is confusing.

    I propose fixing this by enforcing the convention that single-character booleans, when passed, will always give a true value. Unfortunately, there is no good way to negate them, but this can be handled in code by following the convention that boolean values should always default to false, requiring them to be passed as flags to enable them.

    Thoughts?

  2. added this to the 1.3.0 milestone on Apr 13, 2020
  3. self-assigned this
    on Aug 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions