Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [[ and [



On Tue, Mar 06, 2012, Peter Stephenson wrote about "Re: [[ and [":
> On Tue, 6 Mar 2012 11:35:32 +0000
> Sigh.  Sort of.  [ ... -eq ...] and [[ ... -eq ... ]] are numeric tests,
> so if foo is a string of zeros it's not doing what it looks like.  I
> should have said
> 
>   [ $foo = "" ]]
>...
> I don't know why it's that way round, it seems a bit illogical (which is
> why Perl is the other way), but it always has been that way.

In addition to being the way it's always been, it makes even more sense
when you consider the newer features of ksh (and following it, zsh and bash).

In ksh, arithmetic expressions got a new syntax, ((. If if you would
like to check for arithmetic equality (or whatever), you'd most likely
use
	if (( $foo == 2 ))
or even better, without the "$":
	if (( foo == 2 ))
The new (( can of course do much more interesting arithmetic
expressions, e.g.:
	if (( foo+1 < bar/2.0 ))

Then, test, [, or [[ remain useful only for *strings*. So it makes sense
for their ==, <, etc., to be geared for comparing strings. Ksh even
considers "-eq", "-gt" to be obsolete - if you're using them, you should
probably be using (( instead.

The zsh manual does not state that "-eq" and the rest are obsolete (in
Conditional Expressions), but maybe it should: Ksh added this statement
to its manual in 1993, after it was absent in 1998: Compare
	http://www.research.att.com/sw/download/man/man1/ksh88.html
	http://www.research.att.com/sw/download/man/man1/ksh.html


-- 
Nadav Har'El                        |                  Wednesday, Mar 7 2012, 
nyh@xxxxxxxxxxxxxxxxxxx             |-----------------------------------------
Phone +972-523-790466, ICQ 13349191 |Live as if you were to die tomorrow,
http://nadav.harel.org.il           |learn as if you were to live forever.



Messages sorted by: Reverse Date, Date, Thread, Author