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

Re: Bug Report: Env Vars and shell functions



> } And it also says that shell functions should be handled similarily to
> } special builtins (which means that recent patches from Peter and me make
> } zsh less conformant).
> 
> But more intuitive.  I suspect POSIX was merely codifying existing sh/ksh
> behavior there.

I agree.

> } Zsh currently treats a builtin this way
> 
> Clarity:  Zsh treats a builtin the way it treats a shell function ...

Not, the question is wether FOO=bar builtin should affect the shell
environment or not.

> } only if the BINF_MAGICEQUALS flag
> } is set for the builtin.  These builtins are: alias, declare, hash, integer,
> } local, readonly and typeset.

[...]

> } Also note that command arguments are evaluated before variable assignments
> } so the above example will never work.
> 
> Has this always been the case?  (Peter?)  Is this correct according to
> POSIX?  Of what use is the BINF_MAGICEQUALS behavior if the args are
> evaluated before the variable gets assigned?

I think it has.  Substitution is always done in the current shell
environment while FOO=bar something type assignments are done after fork()
(that's why they are local).  Of course fork() is not called for builtins
and functions but the behaviour should be similar (in the future some new
builtins may be added as a builtin replacement for external commands and
that change sould be transparent).

> Hmm.  So `command typeset foo=bar ; echo $foo' has what effect in POSIX?

The command prefix makes special builtins behave like external commands.
So command typeset foo=bar is probably a no-op in POSIX.  It is a no-op in
pdksh but not in bash and ksh93.  But what I really meant is that in POSIX
(and in zsh too)

FOO=bar export FOO

exports foo but

FOO=bar command export FOO

is just a no-op.  Bash does not know that but ksh93 and pdksh do.

> } I'm writing these because these differences between zsh and POSIX are
> } probably the most important ones.
> 
> Perhaps that means they should be recorded somewhere, maybe Etc/BUGS or
> a new file?  (Where's the wish-list/ToDo-list nowadays?)

I'd like to add a COMPATIBILITY section to the manual where these things
will be documented.  Unfortunately at the moment I'm quite busyly fixing
the zsh code which I consider more important.

Zoltan




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