Here's one way to do this, while retaining the true/false values.
if [ "$phone_missing" != false ]; then
echo "phone_missing is not 'false' (but may be non-true, too)"
fi [ "$phone_missing" == true ]; then
echo "phone_missing is true."
The double quotes around
$phone_missing are to protect against the case where variable
phone_missing is not defined at all. Another common idiom to ward against this is
[ x$phone_missing != xfalse ], but the quotes seem more natural to me.
The hint is in the
bash help page for
STRING True if string is not empty.
! EXPR True if expr is false.
[ $foo ] will be true if
$foo is non-empty. Not true or false, just non-empty.
[ ! $foo ] is true if $foo is empty or undefined.
You could always change your code to just set
phone_missing to a non-empty value, which will denote true. If
phone_missing is unset (or empty —
phone_missing=""), it will be false. Otherwise, you should be using the string testing operators (
The other slight issue is the assignment. You have it as
$phone_missing=true, whereas it should be
phone_missing=true (no dollar sign).
Sorry if this is a bit dense, it's because I am. It's been a long day. :)