[ 0 ]is true. Use
if [ 0 ] then echo "always triggers" fi
if false then echo "never triggers" fi
[ str ] checks whether
str is non-empty. It doesn't matter if
0, it will still be evaluated for non-emptyness.
Instead, use the command
false which -- as the manual puts it -- does nothing, unsuccessfully.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.