Re: more splitting

Ray Andrews <[email protected]> Tue, 14 Apr 2026 18:53:49 -0700
Newsgroups gmane.comp.shells.zsh.devel,gmane.comp.shells.zsh.user
Message-ID <[email protected]>

On 2026-04-14 16:24, Philippe Altherr wrote:
> What you try to do is pretty much impossible because when you do 
> 'print -rn $var',you turn the strings in '$var' into a single one 
> where the strings from '$var' are separated by spaces. How is 'hex' 
> supposed to know which of the spaces in that string were from the 
> strings in '$var' and which ones were introduced to separate the 
> strings in '$var'?!?
I quite understand that the trick is to keep the structure of the data 
intact.  It's precisely all this kind of thing that ties me in knots.
>
> Below is a version where both, 'hex $var' and 'print -rN $var | 
> hex', produce the same result. It expects the stdin to contain strings 
> separated by NUL characters. That's why the print call has to use the 
> -N option to join its arguments with NUL characters instead of spaces.
Your version seems good but I'm still trying to understand exactly 
what's going on.  Split on nuls you say.  Here's the output:

% var=("a b" c$'\n''d e f'' ''g h')

% print -rN $var | hex

'a b'
$'c\nd e f g h'

-----------------------------

000000  61  20  62
          a       b
000003
000000  63  0a  64  20  65  20  66  20  67  20  68
          c  \n   d       e       f       g       h
00000b

... exactly the same as the 'argument method'.  But, if it's split on 
nuls, where are they? Should I not see some '00' in the output? I'm 
hoping this hex viewer will let me see all splitting, be it by spaces or 
newlines or nuls. Next time I have a splitting headache, I'll be able to 
view the data in question with absolute clarity. Or ... have you 
cleverly managed to add them and then remove them, leaving the data 
exactly as found?

BTW, the pipe thing might be better abandoned, not really needed, but I 
thought it was worth a look.