>That doesn't work because if one of the file names has a newline in
>it, (f) will split it into two words.  (Also I think you left out an
>open paren.)

sorry about that, I haven't ever considered newlines in filenames, since I wouldn't put them in the first place. Of course that's not to say that cannot happen anyway, of course.
And yes, it should have been:

ls "${(f)$(recent 3)}"
 
thanks for catching that

Pier Paolo Grassi


Il giorno dom 24 ott 2021 alle ore 00:42 Bart Schaefer <schaefer@brasslantern.com> ha scritto:
On Sat, Oct 23, 2021 at 1:57 PM Pier Paolo Grassi <pierpaolog@gmail.com> wrote:
>
> and use it like this:
>
> ls "${(f)$recent 3)}"

That doesn't work because if one of the file names has a newline in
it, (f) will split it into two words.  (Also I think you left out an
open paren.)

print -lr -- ${(q)f}

and then

eval ls -ld $(recent 3)

seems to be the closest thing.

> Il giorno sab 23 ott 2021 alle ore 22:44 Vin Shelton <acs@alumni.princeton.edu> ha scritto:
>>
>> What am I doing wrong?  Does quoting not work correctly in captured output?

The trouble is that "ls" doesn't interpret the quoting, when $(...)
preserves it.  So you have to emit the quotes in a form that the shell
can interpret, and then use "eval" to make that happen.

For extra safety, you could use ${(qqqq)f} instead.