1 #!/usr/bin/env bash
2 #
3 # Test the case statement
4
5 ### Case statement
6 case a in
7 a) echo A ;;
8 *) echo star ;;
9 esac
10 # stdout: A
11
12 ### Case statement with ;;&
13 # ;;& keeps testing conditions
14 # NOTE: ;& and ;;& are bash 4 only, no on Mac
15 case a in
16 a) echo A ;;&
17 *) echo star ;;&
18 *) echo star2 ;;
19 esac
20 # status: 0
21 # stdout-json: "A\nstar\nstar2\n"
22 # N-I dash stdout-json: ""
23 # N-I dash status: 2
24
25 ### Case statement with ;&
26 # ;& ignores the next condition. Why would that be useful?
27 case a in
28 a) echo A ;&
29 XX) echo two ;&
30 YY) echo three ;;
31 esac
32 # status: 0
33 # stdout-json: "A\ntwo\nthree\n"
34 # N-I dash stdout-json: ""
35 # N-I dash status: 2
36
37 ### Case with empty condition
38 case $empty in
39 ''|foo) echo match ;;
40 *) echo no ;;
41 esac
42 # stdout: match
43
44 ### Match a literal with a glob character
45 x='*.py'
46 case "$x" in
47 '*.py') echo match ;;
48 esac
49 # stdout: match
50
51 ### Match a literal with a glob character with a dynamic pattern
52 x='b.py'
53 pat='[ab].py'
54 case "$x" in
55 $pat) echo match ;;
56 esac
57 # stdout: match
58
59 ### Quoted literal in glob pattern
60 x='[ab].py'
61 pat='[ab].py'
62 case "$x" in
63 "$pat") echo match ;;
64 esac
65 # stdout: match
66
67 ### Multiple Patterns Match
68 x=foo
69 result='-'
70 case "$x" in
71 f*|*o) result="$result X"
72 esac
73 echo $result
74 # stdout: - X