On Sun, Nov 09, 2008 at 07:25:49AM +0100, Polytropon wrote:
> On Sat, 8 Nov 2008 12:12:46 +0200, Jonathan McKeown <[EMAIL PROTECTED]> wrote:
> > Essentially, a Bourne-type shell with parameter expansion expands 
> > ${variable#prefix} or ${variable%suffix} to $variable with the prefix or 
> > suffix, respectively, removed.
> 
> So this would be more efficient:
> 
>       #!/bin/sh
>       for f in *eps; do
>               [ ! -f ${f%.eps}.jpg ] && convert $f ${f%.eps}.jpg
>       done

Significantly.

Also, what guarantee do you have that all the filenames that match that
wildcard lack spaces in them?  Your [ and convert commands will botch
badly in that case.  See below.

<style-rant>
What people often forget while writing sh scripts is that spawning
external utilities slows down the script greatly, and destroys system
resources.  You might think "My machine has 923484390GB of RAM, and has
6500 processors; why do I care?" -- step back for a moment and think
about older/smaller boxes, or even more importantly, embedded machines
(very little memory, very little CPU).

Also think about situations where fork() will fail due to resource
limits or existing system resource exhaustion; what then?  I see this
regularly in perl scripts; people relying on `xxx` for no good reason.
I ask them, "Why are you doing this?  Can you not use <native-perl-code>
instead, and avoid wasting resources and excessive risk?", and they
often have no idea what I'm talking about.  And whenever I see `ssh
[EMAIL PROTECTED] "command"` in perl scripts, I cry.

That in mind, don't let your scripting mimic that of "perl bastards" who
*intentionally* write obfuscated code just to "show off" (often citing
"its faster" as the reason, choosing to intentionally ignore that perl
is a compiled language).  For complex pieces of sh that are hard to
visually parse: try to keep it simple, and take the time to write
decent/legible comments above the hairy part of the script.

Also remember that double-quoting filenames or variables that are used
as filenames is a VERY good idea.  Filenames with spaces are quite
common these days.  It's best to assume the worst, but not be *too*
over-zealous.

And don't forget about "set noglob" when appropriate!
</style-rant>

-- 
| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |

_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to