Case statement fallthrough?

bash

Solution

The `;&` and `;;&` operators were introduced in bash 4.0, so if you want to stick with a five year old version of bash, you'll either have to repeat code, or use `if`s.

if (( a == 1)); then echo quick; fi
if (( a > 0 && a <= 2)); then echo brown; fi 
if (( a > 0 && a <= 3)); then echo fox; fi
if (( a == 4)); then echo jumped; fi

or find some other way to achieve the actual goal.

(On a side note, don't use all uppercase variable names. You risk overwriting special shell variables or environment variables.)

Problem

In popular imperative languages, switch statements generally "fall through" to the next level once a case statement has been matched. Example: ``` int a = 2; switch(a) { case 1: print "quick "; case 2: print "brown "; case 3: print "fox "; break; case 4: print "jumped "; } ``` would print "brown fox". However the same code in bash ``` A=2 case $A in 2) echo "QUICK" ;& 2) echo "BROWN" ;& 3) echo "FOX" ;& 4) echo "JUMPED" ;& esac ``` only prints "BROWN" How do I make the case statement in bash "fall through" to the remaining conditions like the first example? (edit: Bash version 3.2.25, the ;& statement (from wiki) results in a syntax error) running: test.sh: ``` #!/bin/bash A=2 case $A in 1) echo "QUICK" ;& 2) echo "BROWN" ;& 3) echo "FOX" ;& esac ``` Gives: ./test.sh: line 6: syntax error near unexpected token `;' ./test.sh: line 6:` ;&'

Original source

Related problems