Problem with test(1)

Dan Nelson dnelson at allantgroup.com
Thu Apr 5 15:08:23 UTC 2007


In the last episode (Apr 05), Joe Marcus Clarke said:
> I noticed something weird with test(1) when I ran across a problem port
> Makefile.  Our test(1) doesn't properly check to make sure there is an
> operand argument to unary operators like -f.  For example:
> 
> test -f
> 
> Will print "TRUE" on FreeBSD.  On Solaris, it will die:
> 
> /usr/bin/test[8]: test: argument expected
> 
> I think this patch is correct in that it does fix the problem, and the
> TEST.sh and TEST.csh regression scripts report the same results pre and
> post-patch.  Comments?

If you follow POSIX's description of test, FreeBSD's current behaviour
is valid and Solaris isn't:

  http://www.opengroup.org/onlinepubs/009695399/utilities/test.html

  The algorithm for determining the precedence of the operators and the
  return value that shall be generated is based on the number of
  arguments presented to test. (However, when using the "[...]" form,
  the right-bracket final argument shall not be counted in this
  algorithm.)

  In the following list, $1, $2, $3, and $4 represent the arguments
  presented to test:

  0 arguments:
      Exit false (1).
  1 argument:
      Exit true (0) if $1 is not null; otherwise, exit false.
  ...

Unary operators shouldn't get parsed as such unless there are two
arguments.
 
> http://www.marcuscom.com/downloads/test.c.diff

-- 
	Dan Nelson
	dnelson at allantgroup.com


More information about the freebsd-hackers mailing list