On 2024-04-12 12:09, Bart Schaefer
wrote:
None of that is about $#. $# just counts either characters in a
string or elements in an array, full stop.
Right, it's a question of getting the splitting correct.
What you're asking for is a dissertation on how to split text into
arrays. I have no idea what you mean by "without spaces" and there's
no inherent definition of a "paragraph"
I know it, thus the air-quotes, In one of my tests I had three
consecutive outputs from aptitude written to the array and at some
point the count was 3, so somehow each separate output got merged
into one element.
so the best you could get from
this is characters, words, and lines -- but even for words you need to
explain whether you mean "shell words" (separated by $IFS characters)
or something else, including whether quotes matter.
It is a bit confusing.
Further, you seem
to be starting from scalar text sometimes, and text that's already
split into an array other times -- in the latter case you have to
explain whether and how you want the array re-joined into a block of
text before re-splitting.
I've got a whole bunch of that figured out today. What I thought
were arrays were scalars that just happened to print nicely on
separate lines where wanted but not due to '\n''s. And what I
thought line splitting -- (f) -- did was enter '\n's into the body
of the variable -- a guy might be forgiven for thinking that -- but
no it's dollar signs. And efforts to force '\n's' were disastrous.
Some quality time with typedef -p really helped. Sorta funny,
everything was working fine, but there were hidden disasters lurking
that surfaced for that most trivial of reasons -- but forced me to
redo quite a bit of stuff where things really are arrays and
nevermind the '\n's. And I get my line counts honestly now :-) One
thing: it sure is hard to hang on to blank lines. I wish there was
some option to default to preserving them.
The shell is not a word processor and doesn't understand your
conceptualization of text formatting.
Very true. But I focus on what I can see and if it looks right it's
easy to think it is right. Anyway, thanks to Lawrence much as been
learned. BTW $# is a very convenient way of detecting how things are
split, now that I know that scalars always return character counts
and arrays, element counts. Easy!