Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Parameter Expansion



> Are you leaving the first element unmodified intentionally?
No. I had to add ${HOME}/ to the beginning of my print command. Is there a way to automatically add it to every element of the array?

> Note that '\n' has no special meaning to the "j" flag if you don't
> use "p" also.  It only becomes a LF character because your "print"
> command is interpreting it.

Thanks for pointing that out.

On Tue, Jul 15, 2025 at 5:02 PM Lawrence Velázquez <larryv@xxxxxxx> wrote:
On Tue, Jul 15, 2025, at 1:07 PM, Vin Shelton wrote:
> Another issue arises with joining:
>
>   home_files=(
>               .local/share/baloo/index
>               sshfs
>              )
>   print ${(j:\n${HOME}/:)home_files}
>
> This yields:
>
> .local/share/baloo/index
> ${HOME}/sshfs

Are you leaving the first element unmodified intentionally?

Note that '\n' has no special meaning to the "j" flag if you don't
use "p" also.  It only becomes a LF character because your "print"
command is interpreting it.


> but I was expecting the ${HOME} to be interpreted. How do I do that?

If you prepend the "p" flag, then arguments to "j", "s", etc. of
the form "$var" are replaced with the contents of "var".  So build
your glue string in a separate variable and use it like this:

        % files=(foo bar baz)
        % sep=$'\n'$HOME/
        % printf '<%s>\n' ${(pj:$sep:)files}
        <foo
        /home/me/bar
        /home/me/baz>

The form is exactly "$var"; substitution doesn't happen if you
include extra characters or use "${var}".  This is not general
parameter expansion.


--
vq


--
Whoa, I'm just surprised at how accurate that description of me really is:
some old cowboy guy that used to shoot movies at Spahn Ranch


Messages sorted by: Reverse Date, Date, Thread, Author