On Wed, Jun 6, 2012 at 3:13 AM, David Korn <[email protected]> wrote:
> cc: [email protected]
> Subject: Re: Re: Re: [ast-users] [ksh93] How to understand `[ -n hello world 
> ]'?
> --------
>
>>
>>> I just cannot understand how to interpret [ -n foo bar ] in ksh. ksh
>>> is a laguage, though it's not as powerful as other languages like
>>> perl. But ksh has its own syntax. Don't tell users the behavior of [
>>> -n foo bar ] is undefined. If it's undefined, just give me a syntax
>>> error message. But [ -n foo bar ] does mean something because ksh
>>> thinks it's TRUE.
>>>
>
>
> I just went back to some earlier notes and now I understand why
> the shell does not report an error for [ -n foo bar ].
>
> My goal with [...] was to avoid breaking existing scripts and my
> expectations where that new scripts would use [[...]] in which
> case the shell could do checking at compile time so that ksh -n
> would detect most errors.
>
> However, in old version of test, if a user did
>        test -f foo*
> and there were files foo and foobar, the shell would expand this to
>        test -f foo foobar
> and the bourne shell would give 0.

I'd like to call this behavior as a bug rather than a feature. And
then someone just found this buggy feature and used it in a hacky way.

> The standard does not require
> this behavior, but if I treated this as an error, it would break
> some existing scripts.
>
> Thus, I assumed that
>        test -letter foo ...
> which is unspecified when ... is not -a or -o in the standard should
> be treated as
>        test -letter foo

Makes sense and it's interesting to know the history background. :)

>
> There is no reliable way to report errors and preserve backward
> compatibility.  The only reliable solution is to use [[...]] or
> to use test and [] only in cases that are defined by the standard.
>
> David Korn
> [email protected]

_______________________________________________
ast-users mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-users

Reply via email to