1 #### Lower Case with , and ,,
2 x='ABC DEF'
3 echo ${x,}
4 echo ${x,,}
5 echo empty=${empty,}
6 echo empty=${empty,,}
7 ## STDOUT:
8 aBC DEF
9 abc def
10 empty=
11 empty=
12 ## END
13
14 #### Upper Case with ^ and ^^
15 x='abc def'
16 echo ${x^}
17 echo ${x^^}
18 echo empty=${empty^}
19 echo empty=${empty^^}
20 ## STDOUT:
21 Abc def
22 ABC DEF
23 empty=
24 empty=
25 ## END
26
27 #### Lower Case with constant string (VERY WEIRD)
28 x='AAA ABC DEF'
29 echo ${x,A}
30 echo ${x,,A} # replaces every A only?
31 ## STDOUT:
32 aAA ABC DEF
33 aaa aBC DEF
34 ## END
35
36 #### Lower Case glob
37 x='ABC DEF'
38 echo ${x,[d-f]}
39 echo ${x,,[d-f]} # This seems buggy, it doesn't include F?
40 ## STDOUT:
41 ABC DEF
42 ABC deF
43 ## END
44
45 #### ${x@Q}
46 x="FOO'BAR spam\"eggs"
47 eval "new=${x@Q}"
48 test "$x" = "$new" && echo OK
49 ## STDOUT:
50 OK
51 ## END
52
53 #### ${!prefix@} ${!prefix*} yields sorted array of var names
54 ZOO=zoo
55 ZIP=zip
56 ZOOM='one two'
57 Z='three four'
58
59 z=lower
60
61 argv.py ${!Z*}
62 argv.py ${!Z@}
63 argv.py "${!Z*}"
64 argv.py "${!Z@}"
65 ## STDOUT:
66 ['Z', 'ZIP', 'ZOO', 'ZOOM']
67 ['Z', 'ZIP', 'ZOO', 'ZOOM']
68 ['Z ZIP ZOO ZOOM']
69 ['Z', 'ZIP', 'ZOO', 'ZOOM']
70 ## END
71