Case statement fallthrough?
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.)
Using ;&
is not very portable, as it requires bash
(not ash
, dash
, or any other minimal sh
) and it requires at least bash
4.0 or newer (not available on all systems, e.g. macOS 10.14.6 still only offers bash 3.2.57).
A work around that I consider much nicer to read than a lot of if
's is loop and modify the case var:
#!/bin/sh
A=2
A_BAK=$A
while [ -n "$A" ]; do
case $A in
1)
echo "QUICK"
A=2
;;
2)
echo "BROWN"
A=3
;;
3)
echo "FOX"
A=4
;;
4)
echo "JUMPED"
A=""
;;
esac
done
A=$A_BAK
Here's a proof of concept: https://www.onlinegdb.com/0ngLPXXn8
Try this:
case $VAR in
normal)
echo "This doesn't do fallthrough"
;;
fallthrough)
echo -n "This does "
;&
somethingelse)
echo "fall-through"
;;
esac