On Thu, Aug 13, 2009 at 02:45:51AM -0400, Mike Frysinger wrote: > i dont think word expansion occurs first, otherwise wouldnt this break: > foo() { > unset b c > f="a b=" > local a=$f c=
As I understand it, this is what happens: 1) The parser separates out the tokens that constitute the command. These are `local', `a=$f', and `c='. The meaning of each token is determined. 2) Parameter expansion is performed on the $f. But this can't create a new token. It's too late for that. The whitespace becomes part of the second token. (If you wanted a new token, you'd have to use eval.) 3) The `local' command is actually executed, performing the assignments, and returning its own exit status. I don't have Chet's insight on all this, so I may be skipping something critical, or misrepresenting a step.