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

Re: preserving single quotes

On 2022-09-28 03:00, Stephane Chazelas wrote:

Use ${(Q)${(z)dd}} instead of $=dd. See `man zshexpn` for the meaning
of (z) and (Q).

Didn't work.

Use either:

dd() aptitude search '?name(libreoffice-java-common)'

Cool.  So we can just create a little impromptu function.  Never tried that but it works.  I sorta understand that since the string isn't being handed off to something else, zsh doesn't feel the need to strip off the quotes -- the function is just as written.


dd="aptitude search '?name(libreoffice-java-common)'"
ee=$(eval -- $dd)
My old friend eval.  But Bart advises to get away from it.  Anyway it works for now.


dd=( aptitude search '?name(libreoffice-java-common)' )
# or
ee=$( "$dd[@]" )
Works.  But that puzzles me, it seems simplest, but how is that that saving the aptitude string as an array preserves the single quotes? It seems unintuitive that the method of saving the string would make the difference.

$=dd just does $IFS-splitting. If $dd is meant to contain shell code,
you should use eval to evaluate it. But to store code, you
generally use functions not variables. The z and Q parameter
expansion flags can do the same tokenisation and quote removal
as the shell syntax parser does, but I don't think you want to
go there.
I've never had anything but grief in the Q continuum.  Hard to express it, but it all seems so .... ad hoc, vague, Rube Goldberg, full of gotchas -- (qqq) doesn't work on Mondays -- impossible to remember, forced ... but your solutions above are crisp, and understandable and rememberable.

Thanks gentlemen both.

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