Daniel Keep wrote:
Powershell is designed to work with managed (.NET) objects. It can dynamically introspect these objects and pull them apart, mutate them, convert them, etc. Imagine if every file on a UNIX system also carried around a reference to its own parser, and a description of how to interpret the data. THAT is what Powershell has over UNIX shells.
You are rarely going to write a program that uses reflection more often than direct calls. It's inefficient in terms of the amount of code you need to write. It's inefficient in terms of running time. And you need to have a very good idea of what you're looking for in the first place. So that doesn't much matter.
What *does* matter is standard interfaces. If a command will usually only return, say, a DataTable or an IEnumerable or a string or an integer, then you're down to a manageable range.
In this regard, Unix has a standard interface: text. This turns out to be usable >90% of the time. It has the advantage that you can write a program in any language that can process text. But it has disadvantages, too.
For example, the output of the "ls" equivalent is a table of objects. By default, it gets toString'd and displayed as a table. However, you can pipe this into a command that reorders columns. Or sorts. And you don't have to dick about with ensuring the filenames don't contain whitespace or newlines because the file names are carried around as actual strings that know their own length.
That's awesome. It's an annoying and unsolvable issue with bash. That would remove issues where you have to escape a string multiple times -- which can result in hard-to-find bugs.
Of course, it only helps when you're working within powershell. But that would still be an improvement.
