How to check if a variable is set in Bash?
Q: from 2011
A: from 2021
https://stackoverflow.com/a/65482850/202553
if test "${name+x}"; then
echo 'name is set'
else
echo 'name is not set'
fiThis question already has a lot of answers, but none of them offered bona fide Boolean expressions to clearly differentiate between variables values.
Here are some unambiguous expressions that I worked out:
| Expression in script | name='fish' | name='' | unset name |
|---|---|---|---|
| test "$name" | TRUE | f | f |
| test -n "$name" | TRUE | f | f |
| test ! -z "$name" | TRUE | f | f |
| test ! "${name-x}" | f | TRUE | f |
| test ! "${name+x}" | f | f | TRUE |
By the way, these expressions are equivalent: test <=> [ ]
Other ambiguous expressions to be used with caution:
| Expression in script | name='fish' | name='' | unset name |
|---|---|---|---|
| test "${name+x}" | TRUE | TRUE | f |
| test "${name-x}" | TRUE | f | TRUE |
| test -z "$name" | f | TRUE | TRUE |
| test ! "$name" | f | TRUE | TRUE |
| test ! -n "$name" | f | TRUE | TRUE |
| test "$name" = '' | f | TRUE | TRUE |