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