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