There is a notion of "short cutting". <br>
When (expr1 && expr2) is evaluated - expr2 is only evaluated if exp1 evaluates to "true". This is because both expr1 AND expr2 have to be true for (expr1 && expr2) to be true. If expr1 evaluates to "false" expr2 is NOT evalued (short cut) because (expr1 && expr2) is already "flase".<br>

Try the following - Assume file F1 exists & file F2 does not exist:<br>
<b>( [ -s F1 ] && echo "File Exists" )</b> (will print "File Exists" - no short cut)<br>
<b>( [ -s F2 ] && echo "File Exists" )</b> (will NOT print "File Exists" - short cut)<br>

Similarly for || (or) - but short cutting is reversed.