Search code examples
bashbooleanconditional-operator

bash "if [ false ];" returns true instead of false -- why?


Why does the following output True?

#!/bin/sh

if [ false ]; then
    echo "True"
else
    echo "False"
fi

This will always output True even though the condition would seem to indicate otherwise. If I remove the brackets [] then it works, but I do not understand why.


Solution

  • You are running the [ (aka test) command with the argument "false", not running the command false. Since "false" is a non-empty string, the test command always succeeds. To actually run the command, drop the [ command.

    if false; then
       echo "True"
    else
       echo "False"
    fi