Hello, I don't think that this really is weird. My understanding is that the terminating '\0' is not treated as part of the content of a string but merely of its representation in memory. So if you output a null string, you don't actually output anything (and therefore assign nothing to $b). That then explains why xd fails to open $a (which is an actual string, albeit with length zero) and waits for standard input because $b isn't expanded to anything.
I hope my attempt at an explanation wasn't utter nonsense and helped clarifying a bit. Regards, Martin
