I put a lot of thoughts in my previous message, but hit send before thinking of a good way
to summarize my main point...
On Tue, Mar 3, 2020, at 13:44, Adam Thornton wrote:
Somewhat disingenuous. I mean, yes, that's true,
but on the other hand
it means that you have to keep the "what Powershell commands operate on
what structure" in your head instead, since you can no longer assume
the pipelines to be a universal interface.
The thing is, each Unix command imposes an implied structure on its
input, so it's not *really* a universal interface. Some operate on
lines as free text, some operate on space-delimited fields [with no
good way to escape them, though some do support an IFS environment
variable to at least change the delimiter], some work best with
fixed-width fields. Few provide a way to embed delimiters [be they
newline/null for record separator, tab/comma/space field separators, or
a user-defined separator for commands that support that] within a
value. Sort requires all values to be comparable as either strings or
numbers. Most commands you might want to use as a source in a pipeline
also expect to be used directly for human-readable output, so they
produce output that can be difficult to use for further processing
(e.g. dates in ls, which not only can't be sorted directly, but also
are limited to minutes for dates in the past year, and days for dates
before that, and are in the local time zone)
Hardly *any* commands you'd use in a pipeline really operate on unstructured bytes.
Compression, I suppose. But other than that, you have just as much need to know what
commands operate on what structure in Unix as in Powershell - the only difference is that
the serialization is explicitly part of the interface... and due to the typical inability
to escape delimiters, leaky.