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

Re: Most Recent File



I think to use it that way you should remove the quoting:

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

and use it like this:

ls "${(f)$recent 3)}"

to have the output of recent to be split at newlines and treated as separate arguments
would be nice not to have to write all this boilerplate though (I use global aliases for that)
hope someone will show a better/simpler way

Pier Paolo Grassi


Il giorno sab 23 ott 2021 alle ore 22:44 Vin Shelton <acs@xxxxxxxxxxxxxxxxxxxx> ha scritto:
Thanks, (I had tried the (q) and the extra assignment after pws suggested it) but no luck:

zsh -f
nuc2% function recent {
function> local dir=
if [[ $# -gt 2 ]]; then
  if [[ ! -d "$3" ]]; then
    print -u2 "$0: directory \"$3\" does not exist."
    return 1
  fi
  [[ $3 != '.' ]] && dir="$3"/
fi

local f=( ${dir}${~2:-*}(-om[1,${1:-1}]) )
print -lr -- ${(@q-)f}
}
nuc2% recent 3
zsh
'Any Given Sunday.mkv'
TheEnglishPatient.mkv
nuc2% \ls -ld $(recent 3)
ls: cannot access "'Any": No such file or directory
ls: cannot access 'Given': No such file or directory
ls: cannot access "Sunday.mkv'": No such file or directory
-rw-r--r-- 1 acs acs 727146010 Oct 22 15:52  TheEnglishPatient.mkv
drwxr-xr-x 3 acs acs      3488 Oct 23 12:20  zsh

What am I doing wrong?  Does quoting not work correctly in captured output?

I appreciate knowing that printf is builtin; thanks.  Sorry I missed that.

 - Vin


On Sat, Oct 23, 2021 at 3:26 PM Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
On Sat, Oct 23, 2021 at 12:08 PM Vin Shelton <acs@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> print -l -- ${dir}${~2:-*}(-om[1,${1:-1}])

You're still missing any of the (q) options on those expansions.

The easiest thing to do here is something like

local recent=( ${dir}${~2:-*}(-om[1,${1:-1}]) )
print -lr -- ${(@q-)recent}

It's important to add the quoting after any globbing but before you
print the result.

> Do I really have to use an external command (like `printf') to make this work?

printf is a zsh builtin, for some years now.  But as long as you add
quoting and do not use echo, you should be OK.


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