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