linux – Bash: Command grouping (&&, ||, …) – Stack Overflow
Posted by jpluimers on 2020/02/18
Excellent answer at [WayBack] linux – Bash: Command grouping (&&, ||, …) – Stack Overflow by Charles Duffy:
Operator precedence for
&&and||is strictly left-to-right.Thus:
pwd; (ls) || { cd .. && ls student/; } && cd student || cd / && cd ;…is equivalent to…
pwd; { { { (ls) || { cd .. && ls student/; }; } && cd student; } || cd /; } && cd ; }…breaking that down graphically:
pwd; { # 1 { # 2 { (ls) || # 3 { cd .. && # 4 ls student/; # 5 }; # 6 } && cd student; # 7 } || cd /; # 8 } && cd ; # 9
pwdhappens unconditionally- (Grouping only)
lshappens (in a subshell) unconditionally.cd ..happens if (3) failed.ls student/happens if (3) failed and (4) succeeded- (Grouping only)
cd studenthappens if either (3) succeeded or both (4) and (5) succeeded.cd /happens if either [both (3) and one of (4) or (5) failed], or [(7) failed].cdhappens if (7) occurred and succeeded, or (7) occurred and succeeded.
Using explicit grouping operators is wise to avoid confusing yourself. Avoiding writing code as hard to read as this is even wiser.
–jeroen






Leave a comment