Inconsistency in find ... -name ...

Eric Blake ericblake@comcast.net
Tue May 16 11:37:00 GMT 2006


> > And notice that since there are no .h files in the current
> > directory, the shell passes the glob through unchanged
> > to find. You can also do 'shopt -s nullglob' to change that.
> I've wondered about this. Does bash special case the find command then? 
> Which other commands does is special case like this?

The nullglob shell option just tells bash that if a glob does
not match any file name, remove the argument altogether
instead of passing the glob through as though it had been
quoted.  Nothing about that is find-specific; although in
the case of 'find . -name *.pl', where there are no .pl files
in the current directory, with nullglob unset it finds *.pl files
in subdirectories, but with nullglob set, it is a syntax error.

Bash does not special case find, or any other command, unless
you write an alias or function in the environment to tell bash
how to special case it.  See my previous email for an idea how
you use an alias (which is expanded prior to globbing, and hence
can temporarily supress globbing), combined with a function (the
alias can only work left-to-right, but by sticking a function in
the middle, you can use the function to rearrange when
things happen) in order to give find special treatment so
that you can use find with globbing supressed.  And be aware
that my suggested alias is not perfect (think exit codes, among
other things); google will show you more complex examples
of the same idea.  But none of it is cygwin specific, and by
default, bash globs everything that looks like a glob and
is not quoted, whether or not you intended for the glob
to be passed through literally.

-- 
Eric Blake


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list