bash null conditional

Sharpe, Sam J sam.sharpe+lists.redhat at gmail.com
Mon Mar 30 19:02:14 UTC 2009


2009/3/30 Craig White <craigwhite at azapple.com>:
> On Mon, 2009-03-30 at 13:42 -0500, Robert Nichols wrote:
>> Craig White wrote:
>> > I'm in my bash book and looking on web but can't seem to resolve this
>> > simple problem.
>> >
>> > $ if [ -n "grep A121 myfile.csv" ]; then echo "null"; fi
>> > null
>> >
>> > $ if [ -n "grep A125 myfile.csv" ]; then echo "null"; fi
>> > null
>> >
>> > A125 definitely is null when I just run the grep command in the quotes
>> > but A121 definitely is not null.
>> >
>> > What am I missing on the if/null operator here?
>>
>> As written, you are asking if the literal string "grep A121 myfile.csv"
>> is non-null, which obviously is true and has nothing whatsoever to do
>> with the 'grep' command, which is never invoked.
>>
>> $ if [ -n "`grep A121 myfile.csv`" ]; then echo "null"; fi
>>
>> This will actually invoke 'grep' and insert its output into the string
>> to be tested.
> ----
> yeah...I actually started with backticks and was trying various things.
>
> This seems to work...
>
> $ if [ `grep -c A121 myfile.csv` -eq 0 ]; then echo "null"; fi
> $ if [ `grep -c A125 myfile.csv` -eq 0 ]; then echo "null"; fi
> null
> $
>
> but if someone clarifies the -n (null) result, I would be grateful.

That is not the null operator.

>From "man test":
       -n STRING
              the length of STRING is non-zero
       -z STRING
              the length of STRING is zero

So your original line was saying:

Is the string "grep blah blah blah" non-zero? which it is, because it
contains the character g r e p etc...


-- 
Sam




More information about the users mailing list