Re: more splitting

Philippe Altherr <[email protected]>
Newsgroups gmane.comp.shells.zsh.devel,gmane.comp.shells.zsh.user
Message-ID <CAGdYchuXfLZNBY2r8ztKuBrP17BN9UZ-jy_pOXtTHUesyMCL3Q@mail.gmail.com>
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'?!?

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.

function hex ()
{
  if [[ -p /dev/fd/0 ]]; then
    local var=(${(0)"$(<&0)"})
    echo
    print -rC1 -- ${(q+)var[@]}
    echo "\n-----------------------------\n"
    for element ("$var[@]") print -rn -- $element | od -vAx -tx1 -tc
  else
    echo
    print -rC1 -- ${(q+)@}
    echo "\n-----------------------------\n"
    for element ("$@") print -rn -- $element | od -vAx -tx1 -tc
  fi
}

Philippe
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.