Re: Bug: temporary assignments vs shell function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux