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