I have done some testing of the bash if statement behavior, but I am not sure whether I understand them correctly on the reason of the output. 
Below are the reason I am proposing from each different if statement output, are all the reasons correct ? I also can't find out the answer of one of the behavior as stated below. bash version is 4.1.2.
#!/bin/bash
set -x
# behavior 1
if [ $anything ]; then
        echo 'true 1'
fi
# result is false cause $anything will be translated by bash to an empty string, and in 'test' command, EXPRESSION omitted will be false
# behavior 2
if [ '' ];then
        echo 'true 2'
fi
# result is false cause in 'test' command, EXPRESSION omitted will be false
# behavior 3
if [ 0 ]; then
        echo 'true 3'
fi
# result is true cause 0 is a STRING and that is same with '-n STRING', since the length of string '0' is definitely nonzero, so it is true
# behavior 4
if [ ]; then
        echo 'true 4'
fi
# result is false cause in 'test' command, EXPRESSION omitted will be false
# behavior 1a
if $anything; then
        echo 'true 1a'
fi
# result is true. But I don't understand why since bash will translate $anything to an empty string, shouldn't this will result in syntax error ?
# behavior 2a
if ''; then
        echo 'true 2a'
fi
# syntax error cause 'list' is empty and command can not be found
# behavior 3a
if 0; then
        echo 'true 3a'
fi
# syntax error cause 'list' is 0 and there is no such command as 0
# behavior 4a
if ; then
        echo 'true 4a'
fi
# syntax error cause list is empty
set +x




testare different than commands.