First of all BASH is a extended version of SH, and they're not even playing the same league as DOS.
The mayor diffrence is that DOS cannot handle multiple applications at the same time.
Then there's the thing with the scripting engine, this also is available in DOS (.bat batch files) but there aren't nearly as many features and operators.
Also it's the little part about SH being linux and DOS being something Microsoft developed (and about 15-20 years between them
Handling the output of dir and ls is something I can't answer since I haven't seen the source code for either ls (probably solvable) or dir (not so likely to get the source)
If you want to know something more specific I suggest you ask a more detailed question