xref: /openbsd/regress/bin/ksh/strsub.t (revision 51c2de25)
1name: strsub-basic
2description:
3	Valid string substitutions
4stdin:
5	echo empty ${v/old/new}
6	v=old
7	echo empty ${v/old/}
8	echo ${v/new/}
9	v='old new'
10	echo ${v/old/new}
11	v='new old'
12	echo ${v/old/new}
13	echo "${v/old/new}"
14	foo='baaaaar'
15	echo ${foo//a/v}
16	echo ${foo/a/v}
17expected-fail: yes
18expected-stdout:
19	empty
20	empty
21	old
22	new new
23	new new
24	new new
25	bvvvvvr
26	bvaaaar
27---
28
29name: strsub-multiline
30description:
31	Value spanning multiple lines
32stdin:
33	v=`cat <<!
34	bsd
35	bsd.rd
36	bsd.sp
37	!`
38	echo ${v/bsd.rd/}
39expected-fail: yes
40expected-stdout:
41	bsd bsd.sp
42---
43
44name: strsub-global
45description:
46	Replace all occurrences
47stdin:
48	v='old new old'
49	echo ${v//old/new}
50	v='w h i t e s p a c e'
51	echo ${v//[[:blank:]]/}
52	v='/usr/src'
53	echo ${v//\////}
54expected-fail: yes
55expected-stdout:
56	new new new
57	whitespace
58	//usr//src
59---
60
61name: strsub-nested
62description:
63	Nested substitutions
64stdin:
65	v=old
66	echo ${u:-${v/old/new}}
67	v='old new'
68	echo ${v/old/${v/old/new}}
69expected-fail: yes
70expected-stdout:
71	new
72	new new new
73---
74
75name: strsub-longest
76description:
77	Favor the first longest match
78stdin:
79	v='old/old'
80	echo ${v/old?(\/)/new }
81	echo ${v/o*/new}
82	echo ${v//old?(\/)/new}
83	echo ${v//?(\/)old//}
84expected-fail: yes
85expected-stdout:
86	new old
87	new
88	newnew
89	//
90---
91
92name: strsub-replacement-1
93description:
94	Variables are expanded
95stdin:
96	v=old
97	r=new
98	echo ${v/old/$r}
99expected-fail: yes
100expected-stdout:
101	new
102---
103
104name: strsub-replacement-2
105description:
106	The replacement is not treated as magic
107stdin:
108	v=old
109	echo ${v/old/new*}
110expected-fail: yes
111expected-stdout:
112	new*
113---
114
115name: strsub-missing-pattern
116description:
117	A pattern is not required
118stdin:
119	v=old
120	echo ${v/}
121expected-fail: yes
122expected-stdout:
123	old
124---
125
126name: strsub-nounset
127description:
128	Respect nounset
129stdin:
130	set -u
131	echo ${v/old/new}
132expected-fail: yes
133expected-stderr-pattern:
134	/v: parameter not set/
135expected-exit: 1
136---
137
138name: strsub-posix
139description:
140	Respect POSIX
141env-setup: !POSIXLY_CORRECT=!
142stdin:
143	echo ${v/old/new}
144expected-stderr-pattern:
145	/bad substitution/
146expected-exit: 1
147---
148