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?

7 Answers

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.

4

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... ;)

2

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.

1

Commands separate by ; are executed sequentially regardless of their completion status.

With &&, the second command is executed only if the first completes successfully (returns exit status of 0).

This is covered in the bash manpage under Lists. I would expect any Unix-like shell to support both of these operators, but I don't know specifically about the Android shell.

1

&& allows for conditional execution while ; always has the second command being executed.

In e.g. command1 && command2, command2 will only execute when command1 has terminated with exit 0, signalling all went well, while in command1 ; command2 the second command will always be executed no matter what the result was of command1.

&& is logical AND in bash. Bash has short-circuit evaluation of logical AND. This idiom is a simpler way of expressing the following:


cmd1;rc=$?
if [ $rc -eq 0 ]; then
   cmd2
fi

Whereas the ; version is merely:


cmd1
cmd2
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Sarah Jenkins

Sarah Jenkins

Senior Technology Editor & AI Specialist

Sarah Jenkins is a veteran tech journalist with over 12 years of experience covering artificial intelligence, mobile innovations, and digital ethics. Her insights have appeared in leading technology publications worldwide.

Share this article
Twitter Facebook Pinterest