grep is always recursive

Loïc Grenié loic.grenie at gmail.com
Thu Jan 29 10:07:46 UTC 2009


2009/1/29 Lorenzo Luengo <lluengo at dgeo.udec.cl>:
> Matthew Flaschen wrote:
>> Lorenzo Luengo wrote:
>>
>>> The problem comes from the bash * expansion that makes grep see that
>>> filename as an option. Is it a bash problem? Is it a grep problem??
>>> Don't know...
>>>
>>
>> It's a "design decision", and it's not going to be changed any time soon
>> (READ: ever).  However, the given workarounds do work reliably.
>>
>> $ grep "lala" *
>>
>> $ grep -- "lala" *
>>
>> will cause the option-looking directory to be ignored.
>>
>>
> This makes me think of those poor bash script developers that don't know
> which filenames they will be handling... I think that a good fix to this
> problem could be adding an option like"--files=*", that handles a
> regular expression for filtering files.
>
> Do you think of it to be a good idea?

    I do not think so: * is intended to be expanded by the shell.
  In that case, you would need the * to be expanded by the
  program (probably through libc). Several shells have their own
  version of glob patterns (I use zsh which is rather prolific) and
  you cannot expect that the programs/library will have a version
  of each glob pattern that they will choose according to which
  shell has started the command; otherwise --files=*(.) will
  not be equivalent to *(.) in zsh and I (and others) would be
  unhappy.

    The better solution (to me) would be that grep and other
  programs be POSIXLY_CORRECT by default (unless the
  user wishes that it is GNU_POSIX_EXTENDED). Since
  this one is impossible, I'd let as is, and set
  POSIXLY_CORRECT.

       Just my .02€,

           Loïc




More information about the ubuntu-users mailing list