Re: more splitting
Philippe Altherr <[email protected]> Thu, 16 Apr 2026 13:11:54 +0200
| Newsgroups | gmane.comp.shells.zsh.devel,gmane.comp.shells.zsh.user |
|---|---|
| Message-ID | <CAGdYchsmpPC3D9baStOSwHj7OzXdQ67jforfRfsiodjPkRVHWg@mail.gmail.com> |
>
> 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.
Bart gave you a version of hex that shows you exactly what's inside a
variable. Here is a version of hex that shows you exactly what's at the
front door and what's at the back door. It can come in handy if you ever
wonder whether what you are passing to a function is indeed what you think
it is.
function hex()
{
if (($#)); then
echo "--- Front door --------------"
print -rC1 -- ${(q+)@}
echo "\n-----------------------------\n"
for element ("$@") print -rn -- $element | od -vAx -tx1 -tc
fi
if [[ -p /dev/fd/0 ]]; then
local var c; while read -u 0 -k 1 c; do var+=$c; done
echo "--- Back door ---------------"
print -rC1 -- ${(q+)var}
echo "\n-----------------------------\n"
for element ("$var") print -rn -- $element | od -vAx -tx1 -tc
fi
}
The line "local var c; while read -u 0 -k 1 c; do var+=$c; done" is rather
verbose and most likely very inefficient but it's the only way I know to
fully read what's at the back door including any trailing newline
characters.
Usage example:
% print -rn xx " y y " $'z\nz\n\n' | hex aa " b b " $'c\nc\n\n'
--- Front door --------------
aa
' b b '
$'c\nc\n\n'
-----------------------------
0000000 61 61
a a
0000002
0000000 20 62 20 62 20
b b
0000005
0000000 63 0a 63 0a 0a
c \n c \n \n
0000005
--- Back door ---------------
$'xx y y z\nz\n\n'
-----------------------------
0000000 78 78 20 20 79 20 79 20 20 7a 0a 7a 0a 0a
x x y y z \n z \n \n
000000e
Philippe