xref: /freebsd/contrib/one-true-awk/testdir/T.clv (revision 23f24377b1a9ab6677f00f2302484d6658d94cab)
1*23f24377SWarner Losh#!/bin/sh
2*23f24377SWarner Loshecho T.clv: check command-line variables
3*23f24377SWarner Losh
4*23f24377SWarner Loshawk=${awk-../a.out}
5*23f24377SWarner Losh
6*23f24377SWarner Loshrm -f core
7*23f24377SWarner Losh
8*23f24377SWarner Losh# stdin only, no cmdline asgn
9*23f24377SWarner Loshecho 'hello
10*23f24377SWarner Loshgoodbye' | $awk '
11*23f24377SWarner LoshBEGIN { x=0; print x; getline; print x, $0 }
12*23f24377SWarner Losh' >foo1
13*23f24377SWarner Loshecho '0
14*23f24377SWarner Losh0 hello' >foo2
15*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (stdin only)'
16*23f24377SWarner Losh
17*23f24377SWarner Losh# cmdline asgn then stdin
18*23f24377SWarner Loshecho 'hello
19*23f24377SWarner Loshgoodbye' | $awk '
20*23f24377SWarner LoshBEGIN { x=0; print x; getline; print x, $0 }
21*23f24377SWarner Losh' x=1 >foo1
22*23f24377SWarner Loshecho '0
23*23f24377SWarner Losh1 hello' >foo2
24*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=1 only)'
25*23f24377SWarner Losh
26*23f24377SWarner Losh# several cmdline asgn, then stdin
27*23f24377SWarner Loshecho 'hello
28*23f24377SWarner Loshgoodbye' | $awk '
29*23f24377SWarner LoshBEGIN { x=0; print x; getline; print x, $0 }
30*23f24377SWarner Losh' x=1 x=2 x=3 >foo1
31*23f24377SWarner Loshecho '0
32*23f24377SWarner Losh3 hello' >foo2
33*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=3 only)'
34*23f24377SWarner Losh
35*23f24377SWarner Losh# several cmdline asgn, then file
36*23f24377SWarner Loshecho 'hello
37*23f24377SWarner Loshgoodbye' >foo
38*23f24377SWarner Losh$awk '
39*23f24377SWarner LoshBEGIN { x=0; print x; getline; print x, $0 }
40*23f24377SWarner Losh' x=1 x=2 x=3 foo >foo1
41*23f24377SWarner Loshecho '0
42*23f24377SWarner Losh3 hello' >foo2
43*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=3 only)'
44*23f24377SWarner Losh
45*23f24377SWarner Losh# cmdline asgn then file
46*23f24377SWarner Loshecho 4 >foo1
47*23f24377SWarner Losh$awk 'BEGIN { getline; print x}' x=4 /dev/null >foo2
48*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=4 /dev/null)'
49*23f24377SWarner Losh
50*23f24377SWarner Losh#cmdline asgn then file but no read of it
51*23f24377SWarner Loshecho 0 >foo1
52*23f24377SWarner Losh$awk 'BEGIN { x=0; getline <"/dev/null"; print x}' x=5 /dev/null >foo2
53*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=5 /dev/null)'
54*23f24377SWarner Losh
55*23f24377SWarner Losh#cmdline asgn then file then read
56*23f24377SWarner Loshecho 'xxx
57*23f24377SWarner Loshyyy
58*23f24377SWarner Loshzzz' >foo
59*23f24377SWarner Loshecho '6
60*23f24377SWarner Loshend' >foo1
61*23f24377SWarner Losh$awk 'BEGIN { x=0; getline; print x}
62*23f24377SWarner Losh      END { print x }' x=6 foo x=end >foo2
63*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=6 /dev/null)'
64*23f24377SWarner Losh
65*23f24377SWarner Losh#cmdline asgn then file then read
66*23f24377SWarner Loshecho '0
67*23f24377SWarner Loshend' >foo1
68*23f24377SWarner Losh$awk 'BEGIN { x=0; getline <"/dev/null"; print x}
69*23f24377SWarner Losh      END { print x }' x=7 /dev/null x=end >foo2
70*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=7 /dev/null)'
71*23f24377SWarner Losh
72*23f24377SWarner Losh#cmdline asgn then file then read; _ in commandname
73*23f24377SWarner Loshecho '0
74*23f24377SWarner Loshend' >foo1
75*23f24377SWarner Losh$awk 'BEGIN { _=0; getline <"/dev/null"; print _}
76*23f24377SWarner Losh      END { print _ }' _=7A /dev/null _=end >foo2
77*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (_=7A /dev/null)'
78*23f24377SWarner Losh
79*23f24377SWarner Losh# illegal varname in commandname
80*23f24377SWarner Losh$awk '{ print }' 99_=foo /dev/null >foo 2>foo2
81*23f24377SWarner Loshgrep "can't open.*foo" foo2 >/dev/null 2>&1 || echo 'BAD: T.clv (7B: illegal varname)'
82*23f24377SWarner Losh
83*23f24377SWarner Losh# these test the new -v option:  awk ... -v a=1 -v b=2 'prog' does before BEGIN
84*23f24377SWarner Losh
85*23f24377SWarner Loshecho 123 >foo1
86*23f24377SWarner Losh$awk -v x=123 'BEGIN { print x }' >foo2
87*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=11)'
88*23f24377SWarner Losh
89*23f24377SWarner Loshecho 123 >foo1
90*23f24377SWarner Losh$awk -vx=123 'BEGIN { print x }' >foo2
91*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=11a)'
92*23f24377SWarner Losh
93*23f24377SWarner Loshecho 123 abc 10.99 >foo1
94*23f24377SWarner Losh$awk -v x=123 -v y=abc -v z1=10.99 'BEGIN { print x, y, z1 }' >foo2
95*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=12)'
96*23f24377SWarner Losh
97*23f24377SWarner Loshecho 123 abc 10.99 >foo1
98*23f24377SWarner Losh$awk -vx=123 -vy=abc -vz1=10.99 'BEGIN { print x, y, z1 }' >foo2
99*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=12a)'
100*23f24377SWarner Losh
101*23f24377SWarner Loshecho 123 abc 10.99 >foo1
102*23f24377SWarner Losh$awk -v x=123 -v y=abc -v z1=10.99 -- 'BEGIN { print x, y, z1 }' >foo2
103*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=12a)'
104*23f24377SWarner Losh
105*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }' >foo0
106*23f24377SWarner Loshecho 123 abc 10.99 >foo1
107*23f24377SWarner Losh$awk -v x=123 -v y=abc -f foo0 -v z1=10.99 >foo2
108*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=13)'
109*23f24377SWarner Losh
110*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }' >foo0
111*23f24377SWarner Loshecho 123 abc 10.99 >foo1
112*23f24377SWarner Losh$awk -vx=123 -vy=abc -f foo0 -vz1=10.99 >foo2
113*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=13a)'
114*23f24377SWarner Losh
115*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }' >foo0
116*23f24377SWarner Loshecho 123 abc 10.99 >foo1
117*23f24377SWarner Losh$awk -f foo0 -v x=123 -v y=abc -v z1=10.99 >foo2
118*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=14)'
119*23f24377SWarner Losh
120*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }' >foo0
121*23f24377SWarner Loshecho 123 abc 10.99 >foo1
122*23f24377SWarner Losh$awk -f foo0 -vx=123 -vy=abc -vz1=10.99 >foo2
123*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=14a)'
124*23f24377SWarner Losh
125*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }
126*23f24377SWarner LoshEND { print x }' >foo0
127*23f24377SWarner Loshecho '123 abc 10.99
128*23f24377SWarner Losh4567' >foo1
129*23f24377SWarner Losh$awk -f foo0 -v x=123 -v y=abc -v z1=10.99 /dev/null x=4567 /dev/null >foo2
130*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=15)'
131*23f24377SWarner Losh
132*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }
133*23f24377SWarner LoshEND { print x }' >foo0
134*23f24377SWarner Loshecho '123 abc 10.99
135*23f24377SWarner Losh4567' >foo1
136*23f24377SWarner Losh$awk -f foo0 -vx=123 -vy=abc -vz1=10.99 /dev/null x=4567 /dev/null >foo2
137*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=15a)'
138*23f24377SWarner Losh
139*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }
140*23f24377SWarner LoshNR==1 { print x }' >foo0
141*23f24377SWarner Loshecho '123 abc 10.99
142*23f24377SWarner Losh4567' >foo1
143*23f24377SWarner Losh$awk -v x=123 -v y=abc -v z1=10.99 -f foo0 x=4567 /etc/passwd >foo2
144*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=16)'
145*23f24377SWarner Losh
146*23f24377SWarner Loshecho 'BEGIN { print x, y, z1 }
147*23f24377SWarner LoshNR==1 { print x }' >foo0
148*23f24377SWarner Loshecho '123 abc 10.99
149*23f24377SWarner Losh4567' >foo1
150*23f24377SWarner Losh$awk -vx=123 -vy=abc -vz1=10.99 -f foo0 x=4567 /etc/passwd >foo2
151*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=16a)'
152*23f24377SWarner Losh
153*23f24377SWarner Losh
154*23f24377SWarner Losh
155*23f24377SWarner Losh# special chars in commandline assigned value;
156*23f24377SWarner Losh# have to use local echo to avoid quoting problems.
157*23f24377SWarner Losh
158*23f24377SWarner Losh./echo 'a\\b\z' >foo1
159*23f24377SWarner Losh./echo 'hello' | $awk '{print x}' x='\141\\\\\142\\z' >foo2
160*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=17)'
161*23f24377SWarner Losh
162*23f24377SWarner Losh./echo "a
163*23f24377SWarner Loshz" >foo1
164*23f24377SWarner Losh./echo 'hello' | $awk '{print x}' x='a\nz' >foo2
165*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=18)'
166*23f24377SWarner Losh
167*23f24377SWarner Losh# a bit circular here...
168*23f24377SWarner Losh$awk 'BEGIN { printf("a%c%c%cz\n", "\b", "\r", "\f") }' >foo1
169*23f24377SWarner Losh./echo 'hello' | $awk '{print x}' x='a\b\r\fz' >foo2
170*23f24377SWarner Loshdiff foo1 foo2 || echo 'BAD: T.clv (x=19)'
171*23f24377SWarner Losh
172*23f24377SWarner Losh
173*23f24377SWarner Losh### newer -v tests
174*23f24377SWarner Losh
175*23f24377SWarner Losh
176*23f24377SWarner Losh$awk -vx 'BEGIN {print x}' >foo 2>&1
177*23f24377SWarner Loshgrep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20)'
178*23f24377SWarner Losh
179*23f24377SWarner Losh$awk -v x 'BEGIN {print x}' >foo 2>&1
180*23f24377SWarner Loshgrep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20a)'
181*23f24377SWarner Losh
182