Having a shell function's variable changes reflected in its caller really kinda makes me shudder - in fact, it reminds me of gosub. It seems like a bug waiting to happen; I'm amazed I haven't been bitten by it yet.
It occurred to me that this might help - but of course it's probably quite a bit slower: #!/bin/sh function fn {( variable=2 )} variable=1 fn echo $variable Is there a better way today? Wouldn't it be a valuable feature to add to a shell interpreter on shopt or something, to have all shell functions create local variables rather than global by default? Followups directed to comp.unix.shell.