On Thu, Jun 04, 2020 at 07:26:34PM +0900, Norihiro Tanaka wrote: > > On Wed, 3 Jun 2020 20:26:41 -0700 > Andi Kleen <a...@firstfloor.org> wrote: > > > > > % grep --version > > grep (GNU grep) 3.4 > > ... > > % echo -n > foo > > % grep -v foo foo ; echo $? > > 1 > > > > Would expect it to exit with zero in this case, since foo is not in the > > file. > > > > When the file is one byte it works as expected: > > > > % echo > foo > > % grep -v foo foo ; echo $? > > > > 0 > > % > > `0 if a line is selected, 1 if no lines were selected,' in manual. > `0: One or more lines were selected. 1: No lines were selected.' in > POSIX. > > > % echo -n > foo > > % grep -v foo foo ; echo $? > > It returns no lines, so it seems reasonable to return 1.
I would argue that a empty file has a single empty line. Besides it completely breaks the "is foo not in file" functionality. In normal terminology that's a off by one bug. Why should an empty file be different than any other files? I just had to rewrite a test script of mine and add lots of echo >> outputfile statements to work around it. -Andi