Bug: temporary assignments vs shell function

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

 



Hi,

I noticed a little bug:

func()
{
	echo "Inside the shell function, foo is $foo"
}
foo=foo
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).

This is inconsistent with calls to commands (both built-in and external). In
both cases, the variable assignment does not affect the execution environment
after the command.

In SUSv3, I only can find:

| If no command name results, variable assignments shall affect the current
| execution environment. Otherwise, the variable assignments shall be exported
| for the execution environment of the command and shall not affect the current
| execution environment (except for special built-ins).

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.

I tried this with current git master, too, and saw no difference, so I suppose
this bug is still open.

What makes this difficult, is that the execution environment of the function is
the SAME as the execution environment of the rest of the script, as neither a
subshell nor a new process is spawned. In a way, this passage of SUSv3 can be
seen as contradictory: the execution environment of the command, and the
current execution environment, are the same, and thus the assignment would have
to both affect the current environment, and not affect it, at the same time
("Schrödinger's Execution Environment").  Most other shells however resolve
this in "some" way so that the called command sees the assignments, and after
the command completes, the assignments are "undone", and I would like dash to
do the same.

Best regards,

Rudolf Polzer
--
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