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