On Wed, May 26, 2010 at 09:00:34PM +1000, Herbert Xu wrote: > [VAR] Replace cmdenviron with localvars > This patch replaces the cmdenviron mechanism for temporary command > variables with the localvars mechanism used by functions. > This reduces code size, and more importantly, makes the variable > assignment take effect immediately as required by POSIX. This change breaks passing variable assignments to regular builtins. For example, dash -c 'HOME=/ cd; pwd' This should print /. (For some reason, this does not work in ksh93 either.) Or dash -c 'cd /bin&&CDPATH=/ cd bin; pwd' This should print /bin twice and not fail any command. (Again this fails in ksh93.) A more common example, IFS=: read -r x y z is already broken in master before this change (due to git commit 55c46b7286f5d9f2d8291158203e2b61d2494420 which effectively replaced bltinlookup("IFS") with ifsval()). Similar issues may pop up with PATH=/foo command -V bar PATH=/foo type bar LC_NUMERIC=de_DE.UTF-8 printf '%f\n' 1,2 (Note: the latter is broken in bash, but in ksh93 and zsh it works, as well as with an external printf(1) program.) 'local' may need additional magic to avoid making things local to the temporary regular-builtin scope. I suppose only functions should induce scope for 'local', such that things like command eval 'local i' continue to create a variable local to the function. -- Jilles Tjoelker -- 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