I have made some changes to how the shell parser, and more significantly, the var/arith/cmdsub expansion routines work. This code is very very hairy, and fragile, and the smallest glance at it tends to cause problems...
So, please be on the lookout for anything weird happening that looks as if it might be caused by sh expansion problems, and if you find anything, either let me know, or file a PR. Feel free to torture test it with whatever you can find that is evil! There are not intended to be any visible operational changes (just a few bug fixes) - it should in normal use behave just the same as before (some of the changes are needed as a base of other coming changes, which is what forced me to dive in to these very murky depths, again!) The changed version manages to pass all of our sh ATF tests (including the new ones I just added which yesterday's sh did not pass), and those test some fairly bizarre expansions, so there is at least some confidence that all will be OK. An ATF test run of everything managed to succeed about as well as it ever does (my test system has no configured network, no nameservers, almost nothing, aside from /dev added to what "make release" produces, and some of the tests seem to want to get answers from the non-existant nameserver. Others just seem to always fail.) The changes were based upon the FreeBSD sh, which should also give some confidence that it should all be OK, but our internals are different than theirs, so there was a fair amount of "interpretation" involved. The modified shell has managed to successfully complete run of build.sh to build a new NetBSD - which of itself is not all that much of a test (nothing in there stresses the shell all that much) but at least it shows that should there be a problem, it will at least be possible to upgrade, rather than having to try to go backwards. It was this last test that has delayed committing this change (which should have happened 24 hours ago) - when I first tried the build, it failed, badly... then I undid my sh changes and tried again, that also failed badly... turned out to be that my test method was bogus, but it took a while to work that out, then successfully build with the old shell to show I had fixed my procedure, then try again with the new shell code, successfully this time... Apologies for the delay. kre
