Hi,
Rudolf Polzer wrote:
> foo=bar func
> echo "foo is now $foo"
>
> will export foo=bar in global scope (i.e. it affects the execution environment
> after the function call).
[...]
> A shell function however isn't a "special built-in" and also counts as a
> "command name", thus the last echo line really should output "foo is now foo",
> which it does in e.g. bash and the FreeBSD /bin/sh.
>From XCU 2.9.5:
| When a function is executed, it shall have the syntax-error and
| variable-assignment properties described for special built-in
| utilities in the enumerated list at the beginning of Section 2.14.
This seems to be one of those odd cases where "bash -o posix" behaves
differently from bash. Based on this test:
$sh -c 'func () { :; }; foo=bar func; echo $foo'
dash, ksh93, bash -o posix, pdksh and its derivatives, zsh with
"emulate sh", and busybox sh implement the specified behavior. I'm
surprised to hear your copy of FreeBSD sh behaves differently.
Meanwhile I agree with you that this could be made clearer in POSIX
without too many changes (for example by adding a reference back to
section 2.9.5 in section 2.14). If you are interested in fixing that,
the kind people in the Austin group at <http://austingroupbugs.net>
would probably be interested.
Thanks for writing and hope that helps.
Regards,
Jonathan
--
To unsubscribe from this list: send the line "unsubscribe dash" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html