Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: if the file is not found the files is not found is the file not found
On Mar 4, 7:48pm, Mikael Magnusson wrote:
>
> On 4 March 2012 19:37, Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
> > I'm sure the archives of zsh-users hold many different answers to the
> > question, "Given a file pattern, how do I test whether at least one
> > matching file exists?"
>
> Here's one more for the collection,
> if () { (( $# )) } arglblargh*(N[1]); then echo yes; else echo no; fi
Yes, I was thinking about that but it doesn't capture the "is a plain
file" semantics of [[ -f ]] -- which you can fix by adding qualifiers
to the glob instead, of course -- and even my formulation falls down
if the glob matches a mix of plain and not-plain files and the first
one happens to be the wrong kind.
(Also, the [1] in your formula is extraneous, but that's a nit.)
Really what one means with [ -f foo* ] is usually one of
# One existing file matching foo* is a plain file
(){ local f; for f; do [ -f "$f" ] && return 0; done; return 1; } foo*(N)
or
# All files matching foo* exist and are plain files
(){ local f; for f; do [ -f "$f" ] || return 1; done; (( $# )); } foo*(N)
Still another way to do "one foo* is plain":
(){ (( $# )) } foo*(Ne:'[ -f "$REPLY" ]':)
I'm not sure there's a way to use (e::) for "every foo* is plain".
--
Barton E. Schaefer
Messages sorted by:
Reverse Date,
Date,
Thread,
Author