Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 May 2008 01:41:33 +0100
From:      RW <fbsd06@mlists.homeunix.com>
To:        freebsd-questions@freebsd.org
Subject:   Re: Now what would you expect this to print out?
Message-ID:  <20080520014133.3447c282@gumby.homeunix.com.>
In-Reply-To: <20080519094603.GC12033@osiris.chen.org.nz>
References:  <7d6fde3d0805190149y7a3bfa75j2ca6a67cef66e8f6@mail.gmail.com> <20080519094603.GC12033@osiris.chen.org.nz>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 19 May 2008 21:46:03 +1200
Jonathan Chen <jonc@chen.org.nz> wrote:

> On Mon, May 19, 2008 at 01:49:35AM -0700, Garrett Cooper wrote:
> > Riddle for the day for folks that have source trees... what would
> > you expect this to print out (ask yourself the question and then
> > execute the command)?
> > 
> >      find /usr/src -name Makefile -or -name '*.mk' -print
> > 
> > The expected output and what actual output differed in my mind, but
> > maybe somebody else can "shed some light" on the logic behind what
> > happened
> 
> It's a problem that catches many young players with find(1). One has
> to remember from reading the man-page that all directives have an
> implicit AND operator on it; and that includes the "-print" directive.
> So to get what you want, you have to introduce brackets:
> 
>     find /usr/src \( -name Makefile -or -name '*.mk' \) -print
> 

Why does that make a difference, when print always evaluates to true?

x AND true   =   x

so 

(a OR b) AND true   =   a OR b 
 a OR (b AND true)  =   a OR b



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080520014133.3447c282>