Karl O. Pinc <[EMAIL PROTECTED]> [2002-11-28 22:41:18 -0600]: > Well, there is a solution, but I don't like it much.
Hmm... How about this suggestion below? > Here's the task at hand. My pwd contains > files named 'uN' where 'N' is an integral version number. I want > the last version number, if there is one. Here's my code: > > last=$(for f in u* ; do > [ -e "$f" ] && echo "$f" ; > done | cut -c 2- | sort -n | tail -n 1 ) Functional. But I see what you mean about it. > (Except This is a translation into pure shell. > I'm writing in php and using php's exec() (which is really system(3)) > instead of $() to produce the vaue for $last. And the real > code abstracts out the magic numbers like the 'u' and the number 2. > FWIW, php's exec() has an implicit 'tail -n 1' built in.) Ew. I am well versed with perl but not php. I hear they are deeply related. So for now I will stick with shell for the examples. > Really, I'm in search of an idiom to take the result of shell's pattern > expansion and pipe it somewhere, except the shell returns the pattern > itself when there's nothing in the fs which matches and I want nothing > at all in that case. How about this as a possibility? Still using 'ls'. (I guess I could have used 'echo * | tr " " "\012"' but I think this is more clear.) It uses grep to extract only matching patterns, adjust to fit your need. I don't think any errors would normally occur and so none need to be ignored. last=$(ls | grep -E '^u[0-9]+' | cut -c 2- | sort -n | tail -n 1) > Oh well. It's shell. How elegent can it be made anyhow? I actually like the shell quite a bit for many tasks. The shell is both powerful and weak at the same time. The art is to play to the strengths. Bob _______________________________________________ Bug-fileutils mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-fileutils