github.com/benhoyt/goawk@v1.8.1/testdata/T.argv (about)

     1  echo T.argv: misc tests of argc and argv
     2  
     3  awk=${awk-../a.out}
     4  
     5  echo >foo1
     6  echo >foo2
     7  $awk '
     8  BEGIN {
     9  	for (i = 1; i < ARGC-1; i++)
    10  		printf "%s ", ARGV[i]
    11  	if (ARGC > 1)
    12  		printf "%s", ARGV[i]
    13  	printf "\n"
    14  	exit
    15  }' * >foo1
    16  echo * >foo2
    17  diff foo1 foo2 || echo 'BAD: T.argv (echo1 *)'
    18  
    19  $awk '
    20  BEGIN {
    21  	for (i = 1; i < ARGC; i++) {
    22  		printf "%s", ARGV[i]
    23  		if (i < ARGC-1)
    24  			printf " "
    25  	}
    26  	printf "\n"
    27  	exit
    28  }' * >foo1
    29  echo * >foo2
    30  diff foo1 foo2 || echo 'BAD: T.argv (echo2 *)'
    31  
    32  $awk '
    33  BEGIN {
    34  	print ARGC
    35  	ARGV[ARGC-1] = ""
    36  	for (i=0; i < ARGC; i++)
    37  		print ARGV[i]
    38  	exit
    39  }
    40  ' a bc def gh >foo1
    41  echo "5
    42  $awk
    43  a
    44  bc
    45  def
    46  " >foo2
    47  diff foo1 foo2 || echo 'BAD: T.argv (argc *)'
    48  
    49  echo '1
    50  2
    51  3' >foo0
    52  echo 'foo1
    53  foo2
    54  foo3' >foo1
    55  $awk '{print L $0}' L=foo <foo0 >foo2
    56  diff foo1 foo2 || echo 'BAD: T.argv (L=foo <foo1)'
    57  
    58  echo '1
    59  2
    60  3' >foo0
    61  echo 'foo1
    62  foo2
    63  foo3' >foo1
    64  $awk '{print L $0}' L=foo foo0 >foo2
    65  diff foo1 foo2 || echo 'BAD: T.argv (L=foo foo1)'
    66  
    67  echo '1
    68  2
    69  3' >foo0
    70  echo 'foo1
    71  foo2
    72  foo3' >foo1
    73  cat foo0 | $awk '{print L $0}' L=foo - >foo2
    74  diff foo1 foo2 || echo 'BAD: T.argv (L=foo -)'
    75  
    76  echo '1
    77  2
    78  3' >foo0
    79  echo 'foo1
    80  foo2
    81  foo3
    82  glop1
    83  glop2
    84  glop3' >foo1
    85  $awk '{print L $0}' L=foo foo0 L=glop foo0 >foo2
    86  diff foo1 foo2 || echo 'BAD: T.argv (L=foo L=glop)'
    87  
    88  echo '1
    89  2
    90  3' >foo0
    91  echo '111
    92  112
    93  113
    94  221
    95  222
    96  223' >foo1
    97  $awk '{print L $0}' L=11 foo0 L=22 foo0 >foo2
    98  diff foo1 foo2 || echo 'BAD: T.argv (L=11 L=22)'
    99  
   100  echo 3.345 >foo1
   101  $awk 'BEGIN { print ARGV[1] + ARGV[2]}' 1 2.345 >foo2
   102  diff foo1 foo2 || echo 'BAD: T.argv (ARGV[1] + ARGV[2])'
   103  
   104  echo 3.345 >foo1
   105  x1=1 x2=2.345 $awk 'BEGIN { print ENVIRON["x1"] + ENVIRON["x2"]}' 1 2.345 >foo2
   106  diff foo1 foo2 || echo 'BAD: T.argv (ENVIRON[x1] + ENVIRON[x2])'
   107  
   108  
   109  echo 'foo1' >foo1
   110  echo 'foo2' >foo2
   111  echo 'foo3' >foo3
   112  $awk 'BEGIN { ARGV[2] = "" }
   113  	{ print }' foo1 foo2 foo3 >foo4
   114  echo 'foo1
   115  foo3' >foo5
   116  diff foo4 foo5 || echo 'BAD: T.argv zap ARGV[2]'
   117  
   118  echo hi > foo1 ; mv foo1 foo2
   119  $awk 'BEGIN { ARGV[1] = "foo2" ; print FILENAME }
   120               { print FILENAME }' foo1 >foo3
   121  echo '
   122  foo2' >foo4
   123  diff foo3 foo4 || echo 'BAD: T.argv startup FILENAME'
   124  	# assumes that startup FILENAME is ""
   125  
   126  
   127  # test data balanced on pinhead...
   128  echo 'ARGV[3] is /dev/null
   129  ARGV[0] is ../a.out
   130  ARGV[1] is /dev/null' >foo1
   131  
   132  $awk 'BEGIN {   # this is a variant of arnolds original example
   133          ARGV[1] = "/dev/null"
   134          ARGV[2] = "glotch"  # file open must skipped deleted argv
   135          ARGV[3] = "/dev/null"
   136          ARGC = 4
   137          delete ARGV[2]
   138  }
   139  # note that input is read here
   140  END {
   141          for (i in ARGV)
   142                  printf("ARGV[%d] is %s\n", i, ARGV[i])
   143  }' >foo2
   144  diff foo1 foo2 || echo 'BAD: T.argv delete ARGV[2]'