Re: more splitting
Ray Andrews <[email protected]> Wed, 15 Apr 2026 08:20:58 -0700
| Newsgroups | gmane.comp.shells.zsh.devel,gmane.comp.shells.zsh.user |
|---|---|
| Message-ID | <[email protected]> |
On 2026-04-14 20:26, Bart Schaefer wrote:
> If you redo 'hex' to accept the name of the variable instead of the
> expansion of the variable, you can fix all of this:
>
> function hex ()
> {
> local _hex_var element
> echo
> if [[ -p /dev/fd/0 ]]; then
> read -d '' -r _hex_var
> else
> _hex_var=$1
> fi
> set -- ${(P)_hex_var}
> print -rC1 -- ${(q+)${(Q)@}}
> echo "\n-----------------------------\n"
> for element ("$@") print -rn -- $element | od -vAx -tx1 -tc
> }
>
> hex var
> print var | hex
Perfect! If the *name* is passed, then it doesn't matter if it's a data
stream. I trust a name is always a string, so front door or back door
... all the same. I hope my comments are correct:
# Test variable:
var=("a b" c$'\n''d e f'' ''g h' ij)
# % hex var
# % print var | hex
# We pass the NAME of the array variable thus the pipe || argument
methods work exactly the same. If we passed the value of the array
instead, the pipe would lose all splitting information, turning it into
a string. Yes? Bart knows these things.
function hex ()
{
local _hex_var element
echo
if [[ -p /dev/fd/0 ]]; then # We are smoking a pipe.
read -d '' -r _hex_var # -d:terminate on nul, -r:'raw'--all
literal.
else
_hex_var=$1 # We receive the NAME of the var :-) tx.
Bart
fi
set -- ${(P)_hex_var} # Expand PPs to value of named var.
# (q+):quote the quotes ... sorta, -C1: columns split on spaces.
print -rC1 -- ${(q+)@}
echo "\n-----------------------------\n"
for element ("$@") print -rn -- $element | od -vAx -tx1 -tc
}
... but many questions running the thing ...
On Tue, Apr 14, 2026 at 8:26 PM Bart Schaefer<[email protected]> wrote:
> print -rC1 -- ${(q+)${(Q)@}}
Sorry, there's an extra (Q) in there, should be just
print -rC1 -- ${(q+)@}
Too much copy-pasting.
That was one of my questions :-)
Already fixed above.