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.