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)


# 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