23f24377b1
July 27, 2021: As per IEEE Std 1003.1-2008, -F "str" is now consistent with -v FS="str" when str is null. Thanks to Warner Losh. July 24, 2021: Fix readrec's definition of a record. This fixes an issue with NetBSD's RS regular expression support that can cause an infinite read loop. Thanks to Miguel Pineiro Jr. Fix regular expression RS ^-anchoring. RS ^-anchoring needs to know if it is reading the first record of a file. This change restores a missing line that was overlooked when porting NetBSD's RS regex functionality. Thanks to Miguel Pineiro Jr. Fix size computation in replace_repeat() for special case REPEAT_WITH_Q. Thanks to Todd C. Miller. Also, included the tests from upstream, though they aren't yet connected to the tree. Sponsored by: Netflix
182 lines
4.8 KiB
Bash
Executable File
182 lines
4.8 KiB
Bash
Executable File
#!/bin/sh
|
|
echo T.clv: check command-line variables
|
|
|
|
awk=${awk-../a.out}
|
|
|
|
rm -f core
|
|
|
|
# stdin only, no cmdline asgn
|
|
echo 'hello
|
|
goodbye' | $awk '
|
|
BEGIN { x=0; print x; getline; print x, $0 }
|
|
' >foo1
|
|
echo '0
|
|
0 hello' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (stdin only)'
|
|
|
|
# cmdline asgn then stdin
|
|
echo 'hello
|
|
goodbye' | $awk '
|
|
BEGIN { x=0; print x; getline; print x, $0 }
|
|
' x=1 >foo1
|
|
echo '0
|
|
1 hello' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=1 only)'
|
|
|
|
# several cmdline asgn, then stdin
|
|
echo 'hello
|
|
goodbye' | $awk '
|
|
BEGIN { x=0; print x; getline; print x, $0 }
|
|
' x=1 x=2 x=3 >foo1
|
|
echo '0
|
|
3 hello' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=3 only)'
|
|
|
|
# several cmdline asgn, then file
|
|
echo 'hello
|
|
goodbye' >foo
|
|
$awk '
|
|
BEGIN { x=0; print x; getline; print x, $0 }
|
|
' x=1 x=2 x=3 foo >foo1
|
|
echo '0
|
|
3 hello' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=3 only)'
|
|
|
|
# cmdline asgn then file
|
|
echo 4 >foo1
|
|
$awk 'BEGIN { getline; print x}' x=4 /dev/null >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=4 /dev/null)'
|
|
|
|
#cmdline asgn then file but no read of it
|
|
echo 0 >foo1
|
|
$awk 'BEGIN { x=0; getline <"/dev/null"; print x}' x=5 /dev/null >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=5 /dev/null)'
|
|
|
|
#cmdline asgn then file then read
|
|
echo 'xxx
|
|
yyy
|
|
zzz' >foo
|
|
echo '6
|
|
end' >foo1
|
|
$awk 'BEGIN { x=0; getline; print x}
|
|
END { print x }' x=6 foo x=end >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=6 /dev/null)'
|
|
|
|
#cmdline asgn then file then read
|
|
echo '0
|
|
end' >foo1
|
|
$awk 'BEGIN { x=0; getline <"/dev/null"; print x}
|
|
END { print x }' x=7 /dev/null x=end >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=7 /dev/null)'
|
|
|
|
#cmdline asgn then file then read; _ in commandname
|
|
echo '0
|
|
end' >foo1
|
|
$awk 'BEGIN { _=0; getline <"/dev/null"; print _}
|
|
END { print _ }' _=7A /dev/null _=end >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (_=7A /dev/null)'
|
|
|
|
# illegal varname in commandname
|
|
$awk '{ print }' 99_=foo /dev/null >foo 2>foo2
|
|
grep "can't open.*foo" foo2 >/dev/null 2>&1 || echo 'BAD: T.clv (7B: illegal varname)'
|
|
|
|
# these test the new -v option: awk ... -v a=1 -v b=2 'prog' does before BEGIN
|
|
|
|
echo 123 >foo1
|
|
$awk -v x=123 'BEGIN { print x }' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=11)'
|
|
|
|
echo 123 >foo1
|
|
$awk -vx=123 'BEGIN { print x }' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=11a)'
|
|
|
|
echo 123 abc 10.99 >foo1
|
|
$awk -v x=123 -v y=abc -v z1=10.99 'BEGIN { print x, y, z1 }' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=12)'
|
|
|
|
echo 123 abc 10.99 >foo1
|
|
$awk -vx=123 -vy=abc -vz1=10.99 'BEGIN { print x, y, z1 }' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=12a)'
|
|
|
|
echo 123 abc 10.99 >foo1
|
|
$awk -v x=123 -v y=abc -v z1=10.99 -- 'BEGIN { print x, y, z1 }' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=12a)'
|
|
|
|
echo 'BEGIN { print x, y, z1 }' >foo0
|
|
echo 123 abc 10.99 >foo1
|
|
$awk -v x=123 -v y=abc -f foo0 -v z1=10.99 >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=13)'
|
|
|
|
echo 'BEGIN { print x, y, z1 }' >foo0
|
|
echo 123 abc 10.99 >foo1
|
|
$awk -vx=123 -vy=abc -f foo0 -vz1=10.99 >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=13a)'
|
|
|
|
echo 'BEGIN { print x, y, z1 }' >foo0
|
|
echo 123 abc 10.99 >foo1
|
|
$awk -f foo0 -v x=123 -v y=abc -v z1=10.99 >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=14)'
|
|
|
|
echo 'BEGIN { print x, y, z1 }' >foo0
|
|
echo 123 abc 10.99 >foo1
|
|
$awk -f foo0 -vx=123 -vy=abc -vz1=10.99 >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=14a)'
|
|
|
|
echo 'BEGIN { print x, y, z1 }
|
|
END { print x }' >foo0
|
|
echo '123 abc 10.99
|
|
4567' >foo1
|
|
$awk -f foo0 -v x=123 -v y=abc -v z1=10.99 /dev/null x=4567 /dev/null >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=15)'
|
|
|
|
echo 'BEGIN { print x, y, z1 }
|
|
END { print x }' >foo0
|
|
echo '123 abc 10.99
|
|
4567' >foo1
|
|
$awk -f foo0 -vx=123 -vy=abc -vz1=10.99 /dev/null x=4567 /dev/null >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=15a)'
|
|
|
|
echo 'BEGIN { print x, y, z1 }
|
|
NR==1 { print x }' >foo0
|
|
echo '123 abc 10.99
|
|
4567' >foo1
|
|
$awk -v x=123 -v y=abc -v z1=10.99 -f foo0 x=4567 /etc/passwd >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=16)'
|
|
|
|
echo 'BEGIN { print x, y, z1 }
|
|
NR==1 { print x }' >foo0
|
|
echo '123 abc 10.99
|
|
4567' >foo1
|
|
$awk -vx=123 -vy=abc -vz1=10.99 -f foo0 x=4567 /etc/passwd >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=16a)'
|
|
|
|
|
|
|
|
# special chars in commandline assigned value;
|
|
# have to use local echo to avoid quoting problems.
|
|
|
|
./echo 'a\\b\z' >foo1
|
|
./echo 'hello' | $awk '{print x}' x='\141\\\\\142\\z' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=17)'
|
|
|
|
./echo "a
|
|
z" >foo1
|
|
./echo 'hello' | $awk '{print x}' x='a\nz' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=18)'
|
|
|
|
# a bit circular here...
|
|
$awk 'BEGIN { printf("a%c%c%cz\n", "\b", "\r", "\f") }' >foo1
|
|
./echo 'hello' | $awk '{print x}' x='a\b\r\fz' >foo2
|
|
diff foo1 foo2 || echo 'BAD: T.clv (x=19)'
|
|
|
|
|
|
### newer -v tests
|
|
|
|
|
|
$awk -vx 'BEGIN {print x}' >foo 2>&1
|
|
grep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20)'
|
|
|
|
$awk -v x 'BEGIN {print x}' >foo 2>&1
|
|
grep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20a)'
|
|
|