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

Re: Most Recent File



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