]> git.ipfire.org Git - thirdparty/bash.git/blob - tests/printf.tests
Bash-4.3 patch 7
[thirdparty/bash.git] / tests / printf.tests
1 LC_ALL=C
2 LC_NUMERIC=C
3
4 # these should output error messages -- the format is required
5 printf
6 printf --
7
8 # these should output nothing
9 printf ""
10 printf -- ""
11
12 # in the future this may mean to put the output into VAR, but for
13 # now it is an error
14 # 2005-03-15 no longer an error
15 unset var
16 printf -v var "%10d" $RANDOM
17 echo ${#var}
18
19 # this should expand escape sequences in the format string, nothing else
20 printf "\tone\n"
21
22 # this should not cut off output after the \c
23 printf "one\ctwo\n"
24
25 # and unrecognized backslash escapes should have the backslash preserverd
26 printf "4\.2\n"
27
28 printf "no newline " ; printf "now newline\n"
29
30 # %% -> %
31 printf "%%\n"
32
33 # this was a bug caused by pre-processing the string for backslash escapes
34 # before doing the `%' format processing -- all versions before bash-2.04
35 printf "\045" ; echo
36 printf "\045d\n"
37
38 # simple character output
39 printf "%c\n" ABCD
40
41 # test simple string output
42 printf "%s\n" unquoted
43
44 # test quoted string output
45 printf "%s %q\n" unquoted quoted
46 printf "%s%10q\n" unquoted quoted
47
48 printf "%q\n" 'this&that'
49
50 # make sure the format string is reused to use up arguments
51 printf "%d " 1 2 3 4 5; printf "\n"
52
53 # make sure that extra format characters get null arguments
54 printf "%s %d %d %d\n" onestring
55
56 printf "%s %d %u %4.2f\n" onestring
57
58 printf -- "--%s %s--\n" 4.2 ''
59 printf -- "--%s %s--\n" 4.2
60
61 # test %b escapes
62
63 # 8 is a non-octal digit, so the `81' should be output
64 printf -- "--%b--\n" '\n\081'
65
66 printf -- "--%b--\n" '\t\0101'
67 printf -- "--%b--\n" '\t\101'
68
69 # these should all display `A7'
70 echo -e "\01017"
71 echo -e "\x417"
72
73 printf "%b\n" '\01017'
74 printf "%b\n" '\1017'
75 printf "%b\n" '\x417'
76
77 printf -- "--%b--\n" '\"abcd\"'
78 printf -- "--%b--\n" "\'abcd\'"
79
80 printf -- "--%b--\n" 'a\\x'
81
82 printf -- "--%b--\n" '\x'
83
84 Z1=$(printf -- "%b\n" '\a\b\e\f\r\v')
85 Z2=$'\a\b\e\f\r\v'
86
87 if [ "$Z1" != "$Z2" ]; then
88 echo "whoops: printf %b and $'' differ" >&2
89 fi
90 unset Z1 Z2
91
92 printf -- "--%b--\n" ''
93 printf -- "--%b--\n"
94
95 # the stuff following the \c should be ignored, as well as the rest
96 # of the format string
97 printf -- "--%b--\n" '4.2\c5.4\n'; printf "\n"
98
99 # unrecognized escape sequences should by displayed unchanged
100 printf -- "--%b--\n" '4\.2'
101
102 # a bare \ should not be processed as an escape sequence
103 printf -- "--%b--\n" '\'
104
105 # make sure extra arguments are ignored if the format string doesn't
106 # actually use them
107 printf "\n" 4.4 BSD
108 printf " " 4.4 BSD ; printf "\n"
109
110 # make sure that a fieldwidth and precision of `*' are handled right
111 printf "%10.8s\n" 4.4BSD
112 printf "%*.*s\n" 10 8 4.4BSD
113
114 printf "%10.8q\n" 4.4BSD
115 printf "%*.*q\n" 10 8 4.4BSD
116
117 printf "%6b\n" 4.4BSD
118 printf "%*b\n" 6 4.4BSD
119
120 # we handle this crap with homemade code in printf.def
121 printf "%10b\n" 4.4BSD
122 printf -- "--%-10b--\n" 4.4BSD
123 printf "%4.2b\n" 4.4BSD
124 printf "%.3b\n" 4.4BSD
125 printf -- "--%-8b--\n" 4.4BSD
126
127 # test numeric conversions -- these four lines should echo identically
128 printf "%d %u %i 0%o 0x%x 0x%X\n" 255 255 255 255 255 255
129 printf "%d %u %i %#o %#x %#X\n" 255 255 255 255 255 255
130
131 printf "%ld %lu %li 0%o 0x%x 0x%X\n" 255 255 255 255 255 255
132 printf "%ld %lu %li %#o %#x %#X\n" 255 255 255 255 255 255
133
134 printf "%10d\n" 42
135 printf "%10d\n" -42
136
137 printf "%*d\n" 10 42
138 printf "%*d\n" 10 -42
139
140 # test some simple floating point formats
141 printf "%4.2f\n" 4.2
142 printf "%#4.2f\n" 4.2
143 printf "%#4.1f\n" 4.2
144
145 printf "%*.*f\n" 4 2 4.2
146 printf "%#*.*f\n" 4 2 4.2
147 printf "%#*.*f\n" 4 1 4.2
148
149 printf "%E\n" 4.2
150 printf "%e\n" 4.2
151 printf "%6.1E\n" 4.2
152 printf "%6.1e\n" 4.2
153
154 printf "%G\n" 4.2
155 printf "%g\n" 4.2
156 printf "%6.2G\n" 4.2
157 printf "%6.2g\n" 4.2
158
159 # test some of the more esoteric features of POSIX.1 printf
160 printf "%d\n" "'string'"
161 printf "%d\n" '"string"'
162
163 printf "%#o\n" "'string'"
164 printf "%#o\n" '"string"'
165
166 printf "%#x\n" "'string'"
167 printf "%#X\n" '"string"'
168
169 printf "%6.2f\n" "'string'"
170 printf "%6.2f\n" '"string"'
171
172 # output from these two lines had better be the same
173 printf -- "--%6.4s--\n" abcdefghijklmnopqrstuvwxyz
174 printf -- "--%6.4b--\n" abcdefghijklmnopqrstuvwxyz
175
176 # and these two also
177 printf -- "--%12.10s--\n" abcdefghijklmnopqrstuvwxyz
178 printf -- "--%12.10b--\n" abcdefghijklmnopqrstuvwxyz
179
180 # tests for translating \' to ' and \\ to \
181 # printf translates \' to ' in the format string...
182 printf "\'abcd\'\n"
183
184 # but not when the %b format specification is used
185 printf "%b\n" \\\'abcd\\\'
186
187 # but both translate \\ to \
188 printf '\\abcd\\\n'
189 printf "%b\n" '\\abcd\\'
190
191 # this was reported as a bug in bash-2.03
192 # these three lines should all echo `26'
193 printf "%d\n" 0x1a
194 printf "%d\n" 032
195 printf "%d\n" 26
196
197 # error messages
198
199 # this should be an overflow, but error messages vary between systems
200 # printf "%lu\n" 4294967296
201
202 # ...but we cannot use this because some systems (SunOS4, for example),
203 # happily ignore overflow conditions in strtol(3)
204 #printf "%ld\n" 4294967296
205
206 printf "%10"
207 printf "ab%Mcd\n"
208
209 # this caused an infinite loop in older versions of printf
210 printf "%y" 0
211
212 # these should print a warning and `0', according to POSIX.2
213 printf "%d\n" GNU
214 printf "%o\n" GNU
215
216 # failures in all bash versions through bash-2.05
217 printf "%.0s" foo
218 printf "%.*s" 0 foo
219
220 printf '%.0b-%.0s\n' foo bar
221 printf '(%*b)(%*s)\n' -4 foo -4 bar
222
223 format='%'`printf '%0100384d' 0`'d\n'
224 printf $format 0
225
226 # failures in all bash versions through bash-3.0 - undercounted characters
227 unset vv
228 printf " %s %s %s \n%n" ab cd ef vv
229 echo "$vv"
230
231 # this doesn't work with printf(3) on all systems
232 #printf "%'s\n" foo
233
234 # test cases from an austin-group list discussion
235 # prints ^G as an extension
236 printf '%b\n' '\7'
237
238 # prints ^G
239 printf '%b\n' '\0007'
240
241 # prints NUL then 7
242 printf '\0007\n'
243
244 # prints no more than two hex digits
245 printf '\x07e\n'
246
247 # additional backslash escapes
248 printf '\"\?\n'
249
250 # failures with decimal precisions until after bash-3.1
251 printf '%0.5d\n' 1
252
253 printf '%05d\n' 1
254 printf '%5d\n' 1
255 printf '%0d\n' 1
256
257 # failures with various floating point formats and 0 after bash-3.2
258
259 printf "%G\n" 0
260 printf "%g\n" 0
261 printf "%4.2G\n" 0
262 printf "%4.2g\n" 0
263
264 printf "%G\n" 4
265 printf "%g\n" 4
266 printf "%4.2G\n" 4
267 printf "%4.2g\n" 4
268
269 printf "%F\n" 0
270 printf "%f\n" 0
271 printf "%4.2F\n" 0
272 printf "%4.2f\n" 0
273
274 printf "%F\n" 4
275 printf "%f\n" 4
276 printf "%4.2F\n" 4
277 printf "%4.2f\n" 4
278
279 printf "%E\n" 0
280 printf "%e\n" 0
281 printf "%4.2E\n" 0
282 printf "%4.2e\n" 0
283
284 printf "%E\n" 4
285 printf "%e\n" 4
286 printf "%4.2E\n" 4
287 printf "%4.2e\n" 4
288
289 printf "%08X\n" 2604292517
290
291 # make sure these format specifiers all output '' for empty string arguments
292 echo q
293 printf "%q\n" ""
294 printf "%q\n"
295
296 echo s
297 printf "%s\n" ''
298 printf "%s\n"
299
300 echo b
301 printf "%b\n" ''
302 printf "%b\n"
303
304 # bug in bash versions up to and including bash-3.2
305 v=yyy
306 printf -v var "%s" '/current/working/directory/*.@(m3|i3|ig|mg)'
307 shopt -s nullglob extglob
308 echo "x$(printf "%b" @(hugo))x"
309 printf -v var "%b" @(hugo); echo "x${var}x"
310
311 # tests variable assignment with -v
312 ${THIS_SH} ./printf1.sub
313
314 ${THIS_SH} ./printf2.sub
315
316 ${THIS_SH} ./printf3.sub
317
318 ${THIS_SH} ./printf4.sub
319