>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 > 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. >