Bash/sh - difference between && and ;
I normally use ;
to combine more than one command in a line, but some people prefer &&
. Is there any difference? For example, cd ~; cd -
and cd ~ && cd -
seems to make the same thing. What version is more portable, e.g. will be supported by a bash-subset like Android's shell or so?
If previous command failed with ;
the second one will run.
But with &&
the second one will not run.
This is a "lazy" logical "AND" operand between operations.
I'm using &&
because a long time ago at the nearby computer:
root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...
^C
but not helped... ;)
cd /tnp/test && rm -rf *
is safe... ;)
In cmd1 && cmd2
, cmd2
is only executed if cmd1
succeeds (returns 0).
In cmd1 ; cmd2
, cmd2
is executed in any case.
Both constructs are part of a POSIX-compliant shell.
&&
means to execute next command if the previous exited with status 0.
For the opposite, use ||
i.e. to be executed if previous command exits with a status not equal to 0 ;
executes always.
Very useful when you need to take a particular action depending on if the previous command finished OK or not.