I’m reading bash examples about if but some examples are written with single square brackets:
if [ -f $param ]
then
#...
fi
others with double square brackets:
if [[ $? -ne 0 ]]
then
start looking for errors in yourlog
fi
What is the difference?
Single
[]are posix shell compliant condition tests.Double
[[]]are an extension to the standard[]and are supported by bash and other shells (e.g. zsh, ksh). They support extra operations (as well as the standard posix operations). For example:||instead of-oand regex matching with=~. A fuller list of differences can be found in the bash manual section on conditional constructs.Use
[]whenever you want your script to be portable across shells. Use[[]]if you want conditional expressions not supported by[]and don’t need to be portable.