<<- home <<- thoughts
TRUTH(7m) | 7m (r-x) | TRUTH(7m) |
truth tables
—
what exactly is “true” in bash?
Specifically, in what cases can you use an abbreviated conditional like the following:
declare var=$( ... ) if [[ $var ]] ; then ... ; fi
This test is roughly equivalent to the more common
‘[[ -n $var ]]
’. Often it is necessary
to differentiate between a variable that's unset vs.
empty.
This code uses some sneaky parameter expansion to test different scenarios.
# Set, empty. declare -- se= # Set, non-empty. declare -- ne='set' # Non-set #declare -- ns # TEST # SET VALUE RESULT #--------------------------------------------------------------------- [[ ${ne} ]] && echo "ne" # YES YES TRUE [[ ${se} ]] && echo "se" # YES NO FALSE [[ ${ns} ]] && echo "ns" # NO --- FALSE [[ ${ne-_} ]] && echo "ne-_" # YES YES TRUE [[ ${se-_} ]] && echo "se-_" # YES NO FALSE [[ ${ns-_} ]] && echo "ns-_" # NO --- TRUE [[ ${ne:-_} ]] && echo "ne:-_" # YES YES TRUE [[ ${se:-_} ]] && echo "se:-_" # YES NO TRUE [[ ${ns:-_} ]] && echo "ns:-_" # NO --- TRUE [[ ${ne+_} ]] && echo "ne+_" # YES YES TRUE [[ ${se+_} ]] && echo "se+_" # YES NO TRUE [[ ${ns+_} ]] && echo "ns+_" # NO --- FALSE [[ ${ne:+_} ]] && echo "ne:+_" # YES YES TRUE [[ ${se:+_} ]] && echo "se:+_" # YES NO FALSE [[ ${ns:+_} ]] && echo "ns:+_" # NO --- FALSE
To test if a variable is...
[[ ! ${var+_} ]]
’
[[ ! ${var-_} ]]
’
[[ ${var} ]]
’
January 16, 2025 | carlinigraphy |