1 #!/bin/bash
2
3 ### Lazy Evaluation of Alternative
4 i=0
5 x=x
6 echo ${x:-$((i++))}
7 echo $i
8 echo ${undefined:-$((i++))}
9 echo $i # i is one because the alternative was only evaluated once
10 # status: 0
11 # stdout-json: "x\n0\n0\n1\n"
12 # N-I dash status: 2
13 # N-I dash stdout-json: "x\n0\n"
14
15 ### Default value when empty
16 empty=''
17 echo ${empty:-is empty}
18 # stdout: is empty
19
20 ### Default value when unset
21 echo ${unset-is unset}
22 # stdout: is unset
23
24 ### Assign default value when empty
25 empty=''
26 ${empty:=is empty}
27 echo $empty
28 # stdout: is empty
29
30 ### Assign default value when unset
31 ${unset=is unset}
32 echo $unset
33 # stdout: is unset
34
35 ### Alternative value when empty
36 v=foo
37 empty=''
38 echo ${v:+v is not empty} ${empty:+is not empty}
39 # stdout: v is not empty
40
41 ### Alternative value when unset
42 v=foo
43 echo ${v+v is not unset} ${unset:+is not unset}
44 # stdout: v is not unset
45
46 ### Error when empty
47 empty=''
48 ${empty:?is empty}
49 # status: 1
50 # OK dash status: 2
51
52 ### Error when unset
53 ${unset?is empty}
54 # status: 1
55 # OK dash status: 2
56
57 ### Error when unset
58 v=foo
59 echo ${v+v is not unset} ${unset:+is not unset}
60 # stdout: v is not unset