<<- 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 |