This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: bash test -n && test -z return tru


On Fri, 2005-08-19 at 15:45 -0400, Christopher Faylor wrote:
> On Fri, Aug 19, 2005 at 07:27:55PM +0000, Eric Blake wrote:
> >> On Fri, Aug 19, 2005 at 03:01:19PM -0400, Poor Yorick wrote:
> >> >from reading the bash man pages, I would have thought the -n and -z were 
> >> >mutually exclusive.  Therefore I don't understand this result:
> >> >
> >> >~>$ [ -n $(which nonexisingfilename 2>/dev/null) ] && [ -z $(which 
> >> >nonexistingfilename 2&>/dev/null) ]  && echo hello
> >> >hello
> >> >~>$
> >> >
> >> >can anyone help explain this?
> >> 
> >> This defaults to
> >> 
> >>   [ -n ] && [ -z ] && echo hello
> >> 
> >> I would have expected a syntax error in that case.
> >
> >Nope.  POSIX requires that when there is one argument, it evaluates
> >to true if it is not empty.
> 
> Thanks for the clarification.
> 
> >Neither -n nor -z is empty, so they are both true.  Remember, if there
> >are no quotes around a word, it is subject to field splitting, such
> >that an empty string disappears from the argument list altogether, and
> >you are only giving one argument to [.
> 
> Er, yeah.  That's what I meant when I said:
> 
> "This defaults to:
> 
>   [ -n ] ..." ?
> 
> and then mentioned that the argument had to be quoted.
> 
> cgf

NOTE: I have serious intent with this inlay, please put away your
personal feelings. Here we go...

Saying "defaults to" something; to me this means that (without specified
arguments) you get a certain behaviour.

People who aren't initiate on the subject (or fluent in English!) tend
to stumble on wording, so this time the words "defaults to" didn't
clarify what actually happens.

An attempt to specify arguments was present - leading to confusion.
Why:  $(which nonexisingfilename 2>/dev/null)  "expands" to a null
string - and thus a fallback to the special default case.

I think a simple substitution of 
	"This defaults to:"
with 
	"After command substitution of 'which' you end up with:"
would have said more.

An example of how easy it is to confuse ppl though not really intending
to do so?
<Fill in: researh project about how to write good documents>


WRT confusion:

-- Redhat Fedora 3 --
$ man bash
/command substitution

Here the description of the two forms of command substitution has a
NONWORKING form of quotes around the second form example.
 -> TOTAL confusion for an non-initiate.

[henk@p450 ~]$ echo ‘echo Boo‘
‘echo Boo‘

Correct output, with the right quotes is just "Boo".
  -> ` <- the right one, does this quote end up correctly here? 

[henk@p450 ~]$ echo `echo Boo`
Boo

I wouldn't be surprised if this is the case for "man bash" in cygwin
too.

-- 
/Hannu E K Nevalainen


--
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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]