1 | ## compare_shells: bash
|
2 |
|
3 | #### shopt -s nullglob
|
4 | argv.py _tmp/spec-tmp/*.nonexistent
|
5 | shopt -s nullglob
|
6 | argv.py _tmp/spec-tmp/*.nonexistent
|
7 | ## STDOUT:
|
8 | ['_tmp/spec-tmp/*.nonexistent']
|
9 | []
|
10 | ## END
|
11 | ## N-I dash/mksh/ash STDOUT:
|
12 | ['_tmp/spec-tmp/*.nonexistent']
|
13 | ['_tmp/spec-tmp/*.nonexistent']
|
14 | ## END
|
15 |
|
16 | #### shopt -s failglob in command context
|
17 | argv.py *.ZZ
|
18 | shopt -s failglob
|
19 | argv.py *.ZZ # nothing is printed, not []
|
20 | echo status=$?
|
21 | ## STDOUT:
|
22 | ['*.ZZ']
|
23 | status=1
|
24 | ## END
|
25 | ## N-I dash/mksh/ash STDOUT:
|
26 | ['*.ZZ']
|
27 | ['*.ZZ']
|
28 | status=0
|
29 | ## END
|
30 |
|
31 | #### shopt -s failglob in loop context
|
32 | for x in *.ZZ; do echo $x; done
|
33 | echo status=$?
|
34 | shopt -s failglob
|
35 | for x in *.ZZ; do echo $x; done
|
36 | echo status=$?
|
37 | ## STDOUT:
|
38 | *.ZZ
|
39 | status=0
|
40 | status=1
|
41 | ## END
|
42 | ## N-I dash/mksh/ash STDOUT:
|
43 | *.ZZ
|
44 | status=0
|
45 | *.ZZ
|
46 | status=0
|
47 | ## END
|
48 |
|
49 | #### shopt -s failglob in array literal context
|
50 | myarr=(*.ZZ)
|
51 | echo "${myarr[@]}"
|
52 | shopt -s failglob
|
53 | myarr=(*.ZZ)
|
54 | echo status=$?
|
55 | ## STDOUT:
|
56 | *.ZZ
|
57 | status=1
|
58 | ## END
|
59 | ## N-I mksh STDOUT:
|
60 | *.ZZ
|
61 | status=0
|
62 | ## END
|
63 | ## N-I dash/ash stdout-json: ""
|
64 | ## N-I dash/ash status: 2
|
65 |
|
66 | #### shopt -s failglob exits properly in command context with set -e
|
67 | set -e
|
68 | argv.py *.ZZ
|
69 | shopt -s failglob
|
70 | argv.py *.ZZ
|
71 | echo status=$?
|
72 | ## STDOUT:
|
73 | ['*.ZZ']
|
74 | ## END
|
75 | ## status: 1
|
76 | ## N-I dash/mksh/ash STDOUT:
|
77 | ['*.ZZ']
|
78 | ## END
|
79 | ## N-I dash/mksh/ash status: 127
|
80 |
|
81 | #### shopt -s failglob exits properly in loop context with set -e
|
82 | set -e
|
83 | for x in *.ZZ; do echo $x; done
|
84 | echo status=$?
|
85 |
|
86 | shopt -s failglob
|
87 | for x in *.ZZ; do echo $x; done
|
88 | echo status=$?
|
89 |
|
90 | ## status: 1
|
91 | ## STDOUT:
|
92 | *.ZZ
|
93 | status=0
|
94 | ## END
|
95 |
|
96 | ## N-I dash/mksh/ash status: 127
|
97 | ## N-I dash/mksh/ash STDOUT:
|
98 | *.ZZ
|
99 | status=0
|
100 | ## END
|
101 |
|
102 | #### shopt -s failglob behavior on single line with semicolon
|
103 | # bash behaves differently when commands are separated by a semicolon than when
|
104 | # separated by a newline. This behavior doesn't make sense or seem to be
|
105 | # intentional, so osh does not mimic it.
|
106 |
|
107 | shopt -s failglob
|
108 | echo *.ZZ; echo status=$? # bash doesn't execute the second part!
|
109 | echo *.ZZ
|
110 | echo status=$? # bash executes this
|
111 |
|
112 | ## STDOUT:
|
113 | status=1
|
114 | ## END
|
115 |
|
116 | ## OK osh STDOUT:
|
117 | status=1
|
118 | status=1
|
119 | ## END
|
120 |
|
121 | ## N-I dash/mksh/ash STDOUT:
|
122 | *.ZZ
|
123 | status=0
|
124 | *.ZZ
|
125 | status=0
|
126 | ## END
|
127 |
|
128 | #### dotglob (bash option that dashglob is roughly consistent with)
|
129 | mkdir -p $TMP/dotglob
|
130 | cd $TMP/dotglob
|
131 | touch .foorc other
|
132 |
|
133 | echo *
|
134 | shopt -s dotglob
|
135 | echo * | sort
|
136 | ## STDOUT:
|
137 | other
|
138 | .foorc other
|
139 | ## END
|
140 | ## N-I dash/mksh/ash STDOUT:
|
141 | other
|
142 | other
|
143 | ## END
|
144 |
|