Is there any functional advantage of using a simple if-then statement such as
if [ … ]; then
do
over using short-circuit list evaluators with command groups such as
[ … ] && {
}
Of course, if-then is the standard way of writing it, but is there any actual difference/advantage from a functional point of view?
Using ()
instead of {}
would spawn a new subshell, thus creating a new scope for variables inside the if-then block.
Not with your example, but the commonly seen
condition && foo || bar
is not the same as
if condition
then
foo
else
bar
fi
In the former case, bar
will run not only if condition
fails, but if foo
fails.