I have defined the following variable:
myVar=true
now I'd like to run something along the lines of this:
if [ myVar ]
then
echo "true"
else
echo "false"
fi
The above code does work, but if I try to set
myVar=false
it will still output true. What might be the problem?
edit: I know I can do something of the form
if [ "$myVar" = "true" ]; then ...
but it is kinda awkward.
Thanks
Note that the
if $myVar; then ... ;fi
construct has a security problem you might want to avoid withYou might also want to rethink why
if [ "$myvar" = "true" ]
appears awkward to you. It's a shell string comparison that beats possibly forking a process just to obtain an exit status. A fork is a heavy and expensive operation, while a string comparison is dead cheap. Think a few CPU cycles versus several thousand. Mycase
solution is also handled without forks.bash doesn't know boolean variables, nor does
test
(which is what gets called when you use[
).A solution would be:
because
true
andfalse
are commands that return0
or1
respectively which is whatif
expects.Note that the values are "swapped". The command after
if
must return0
on success while0
means "false" in most programming languages.SECURITY WARNING: This works because BASH expands the variable, then tries to execute the result as a command! Make sure the variable can't contain malicious code like
rm -rf /