192108Sphk#!/bin/sh
292108Sphkecho T.clv: check command-line variables
392108Sphk
492108Sphkawk=${awk-../a.out}
592108Sphk
692108Sphkrm -f core
792108Sphk
892108Sphk# stdin only, no cmdline asgn
992108Sphkecho 'hello
1092108Sphkgoodbye' | $awk '
1192108SphkBEGIN { x=0; print x; getline; print x, $0 }
1292108Sphk' >foo1
1392108Sphkecho '0
1492108Sphk0 hello' >foo2
1592108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (stdin only)'
1692108Sphk
1792108Sphk# cmdline asgn then stdin
1892108Sphkecho 'hello
1992108Sphkgoodbye' | $awk '
2092108SphkBEGIN { x=0; print x; getline; print x, $0 }
2192108Sphk' x=1 >foo1
2292108Sphkecho '0
2392108Sphk1 hello' >foo2
2492108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=1 only)'
2592108Sphk
2692108Sphk# several cmdline asgn, then stdin
2792108Sphkecho 'hello
2892108Sphkgoodbye' | $awk '
2992108SphkBEGIN { x=0; print x; getline; print x, $0 }
3092108Sphk' x=1 x=2 x=3 >foo1
3192108Sphkecho '0
3292108Sphk3 hello' >foo2
3392108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=3 only)'
3492108Sphk
3592108Sphk# several cmdline asgn, then file
36116196Sobrienecho 'hello
37116196Sobriengoodbye' >foo
38116196Sobrien$awk '
39104519SphkBEGIN { x=0; print x; getline; print x, $0 }
40104519Sphk' x=1 x=2 x=3 foo >foo1
4192108Sphkecho '0
4292108Sphk3 hello' >foo2
4392108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=3 only)'
4492108Sphk
4592108Sphk# cmdline asgn then file
46196823Spjdecho 4 >foo1
47110119Sphk$awk 'BEGIN { getline; print x}' x=4 /dev/null >foo2
4892108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=4 /dev/null)'
49223921Sae
5092108Sphk#cmdline asgn then file but no read of it
51111979Sphkecho 0 >foo1
5292108Sphk$awk 'BEGIN { x=0; getline <"/dev/null"; print x}' x=5 /dev/null >foo2
5392108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=5 /dev/null)'
5492108Sphk
5592108Sphk#cmdline asgn then file then read
5692108Sphkecho 'xxx
57112952Sphkyyy
58112476Sphkzzz' >foo
5992108Sphkecho '6
60219970Smavend' >foo1
61219970Smav$awk 'BEGIN { x=0; getline; print x}
62219970Smav      END { print x }' x=6 foo x=end >foo2
63248694Smavdiff foo1 foo2 || echo 'BAD: T.clv (x=6 /dev/null)'
64219970Smav
65219970Smav#cmdline asgn then file then read
66219970Smavecho '0
67219970Smavend' >foo1
68219970Smav$awk 'BEGIN { x=0; getline <"/dev/null"; print x}
69219970Smav      END { print x }' x=7 /dev/null x=end >foo2
70219970Smavdiff foo1 foo2 || echo 'BAD: T.clv (x=7 /dev/null)'
7192108Sphk
72133314Sphk#cmdline asgn then file then read; _ in commandname
73133314Sphkecho '0
74133314Sphkend' >foo1
75237518Sken$awk 'BEGIN { _=0; getline <"/dev/null"; print _}
7692108Sphk      END { print _ }' _=7A /dev/null _=end >foo2
77141624Sphkdiff foo1 foo2 || echo 'BAD: T.clv (_=7A /dev/null)'
78249507Sivoras
79133318Sphk# illegal varname in commandname
80133314Sphk$awk '{ print }' 99_=foo /dev/null >foo 2>foo2
81133314Sphkgrep "can't open.*foo" foo2 >/dev/null 2>&1 || echo 'BAD: T.clv (7B: illegal varname)'
82133314Sphk
83237518Sken# these test the new -v option:  awk ... -v a=1 -v b=2 'prog' does before BEGIN
84133314Sphk
8592108Sphkecho 123 >foo1
8692108Sphk$awk -v x=123 'BEGIN { print x }' >foo2
87219970Smavdiff foo1 foo2 || echo 'BAD: T.clv (x=11)'
88227309Sed
89227309Sedecho 123 >foo1
90219970Smav$awk -vx=123 'BEGIN { print x }' >foo2
91115473Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=11a)'
92115473Sphk
93110052Sphkecho 123 abc 10.99 >foo1
94110052Sphk$awk -v x=123 -v y=abc -v z1=10.99 'BEGIN { print x, y, z1 }' >foo2
95110052Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=12)'
96226736Spjd
97125975Sphkecho 123 abc 10.99 >foo1
98125975Sphk$awk -vx=123 -vy=abc -vz1=10.99 'BEGIN { print x, y, z1 }' >foo2
99110052Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=12a)'
100110052Sphk
101110052Sphkecho 123 abc 10.99 >foo1
102110052Sphk$awk -v x=123 -v y=abc -v z1=10.99 -- 'BEGIN { print x, y, z1 }' >foo2
103110052Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=12a)'
104226736Spjd
105125975Sphkecho 'BEGIN { print x, y, z1 }' >foo0
106125975Sphkecho 123 abc 10.99 >foo1
107110052Sphk$awk -v x=123 -v y=abc -f foo0 -v z1=10.99 >foo2
108110052Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=13)'
10992108Sphk
11092108Sphkecho 'BEGIN { print x, y, z1 }' >foo0
11192108Sphkecho 123 abc 10.99 >foo1
11292108Sphk$awk -vx=123 -vy=abc -f foo0 -vz1=10.99 >foo2
113219970Smavdiff foo1 foo2 || echo 'BAD: T.clv (x=13a)'
11492108Sphk
11592108Sphkecho 'BEGIN { print x, y, z1 }' >foo0
11692108Sphkecho 123 abc 10.99 >foo1
11792108Sphk$awk -f foo0 -v x=123 -v y=abc -v z1=10.99 >foo2
11892108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=14)'
119248694Smav
120219970Smavecho 'BEGIN { print x, y, z1 }' >foo0
121125539Spjdecho 123 abc 10.99 >foo1
122125539Spjd$awk -f foo0 -vx=123 -vy=abc -vz1=10.99 >foo2
123125539Spjddiff foo1 foo2 || echo 'BAD: T.clv (x=14a)'
124125539Spjd
125125539Spjdecho 'BEGIN { print x, y, z1 }
126125539SpjdEND { print x }' >foo0
127125975Sphkecho '123 abc 10.99
128125539Spjd4567' >foo1
12992108Sphk$awk -f foo0 -v x=123 -v y=abc -v z1=10.99 /dev/null x=4567 /dev/null >foo2
13092108Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=15)'
13192108Sphk
132110119Sphkecho 'BEGIN { print x, y, z1 }
13392108SphkEND { print x }' >foo0
134111668Sphkecho '123 abc 10.99
135110119Sphk4567' >foo1
136111668Sphk$awk -f foo0 -vx=123 -vy=abc -vz1=10.99 /dev/null x=4567 /dev/null >foo2
137166861Sn_hibmadiff foo1 foo2 || echo 'BAD: T.clv (x=15a)'
138110119Sphk
139110119Sphkecho 'BEGIN { print x, y, z1 }
140110119SphkNR==1 { print x }' >foo0
141251616Smavecho '123 abc 10.99
142251616Smav4567' >foo1
143110119Sphk$awk -v x=123 -v y=abc -v z1=10.99 -f foo0 x=4567 /etc/passwd >foo2
144105551Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=16)'
145105551Sphk
146110727Sphkecho 'BEGIN { print x, y, z1 }
147110727SphkNR==1 { print x }' >foo0
148110727Sphkecho '123 abc 10.99
149110727Sphk4567' >foo1
150110727Sphk$awk -vx=123 -vy=abc -vz1=10.99 -f foo0 x=4567 /etc/passwd >foo2
151252657Ssmhdiff foo1 foo2 || echo 'BAD: T.clv (x=16a)'
152252657Ssmh
153252657Ssmh
154252657Ssmh
155249940Ssmh# special chars in commandline assigned value;
156252657Ssmh# have to use local echo to avoid quoting problems.
157249940Ssmh
158249940Ssmh./echo 'a\\b\z' >foo1
159249940Ssmh./echo 'hello' | $awk '{print x}' x='\141\\\\\142\\z' >foo2
160249940Ssmhdiff foo1 foo2 || echo 'BAD: T.clv (x=17)'
16192108Sphk
162111668Sphk./echo "a
163110119Sphkz" >foo1
164111668Sphk./echo 'hello' | $awk '{print x}' x='a\nz' >foo2
165110119Sphkdiff foo1 foo2 || echo 'BAD: T.clv (x=18)'
166110119Sphk
167110119Sphk# a bit circular here...
168110119Sphk$awk 'BEGIN { printf("a%c%c%cz\n", "\b", "\r", "\f") }' >foo1 
169110119Sphk./echo 'hello' | $awk '{print x}' x='a\b\r\fz' >foo2
170219970Smavdiff foo1 foo2 || echo 'BAD: T.clv (x=19)'
171219970Smav
172219970Smav
173110119Sphk### newer -v tests
17492108Sphk
17592108Sphk
17692108Sphk$awk -vx 'BEGIN {print x}' >foo 2>&1
17792108Sphkgrep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20)'
17892108Sphk
17995038Sphk$awk -v x 'BEGIN {print x}' >foo 2>&1
180219950Smavgrep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20a)'
18195038Sphk
182104450Sphk