Chet Ramey <chet.ra...@case.edu> wrote:

> > ksh88 has POSIX compliant functions, see:
> > 
> > ksh -c 'a=0; a() { a=12; } ; a; echo $a'
>
> Nobody is arguing whether or not unqualified assignment statements in ksh88
> modify global variables. This is not the behavior that makes ksh88
> functions non-conformant.
>
> I included the text above to note that Korn doesn't consider ksh88
> functions conformant and that he needed to modify ksh behavior for
> conformance.
>
> The portion about "local variables" in the quoted text means that
> the presence of the `typeset' command doesn't make a variable local:
> there are no local variables in ksh93 posix functions at all.

The problem with ksh93 is that it does not allow to create variables with 
local scope inside POSIX/Bourne functions while ksh88 allows to make a variable 
"local" by using the "local builtin" that really is a builtin alias to 
"typeset":

        ksh -c 'a=0; a() { local a; a=12; } ; a; echo $a'

prints 0 with ksh88.

But this is what you get with ksh93:

ksh93 -c 'a=0; a() { local a; a=12; } ; a; echo $a'
ksh93[1]: local: not found [No such file or directory]
12

Linux distros decided (while moving to "dash" as /bin/sh) that they "need" a 
basic POSIX shell that in addition supports the "local" feature.

Jörg

-- 
 EMail:jo...@schily.net                    (home) Jörg Schilling D-13353 Berlin
    joerg.schill...@fokus.fraunhofer.de (work) Blog: http://schily.blogspot.com/
 URL: http://cdrecord.org/private/ http://sf.net/projects/schilytools/files/'

Reply via email to