---

Linux Gazette: The Deep, Dark Secrets of Bash

“Deep within the bash man page lurk terrible things, not to
be approached by the timid or the inexperienced… Beware, Pilgrim:
the last incautious spelunker into these mysterious regions was
found, weeks later, muttering some sort of strange incantations
that sounded like “nullglob”, “dotglob”, and
“MAILPATH=’/usr/spool/mail/bfox?”You have mail”:~/shell-mail?”$_
has mail!”‘”
(He was immediately hired by an Unnamed Company
in Silicon Valley for an unstated (but huge) salary… but that’s
beside the point.)”

“The built-in parsing capabilities of bash are rather minimal as
compared to, say, perl or awk: in my best estimate, they’re not
intended for serious processing, just “quick and dirty” minor-task
handling. Nevertheless, they can be very handy for that purpose. As
an example, let’s say that you need to differentiate between
lowercase and capitalized filenames in processing a directory – I
ended up doing that with my backgrounds for X, since some of them
look best tiled, and others stretched to full-screen size (file
size wasn’t quite a good-enough guide). I “capped” all the names of
the full-sized pics, and “decapped” all the tiles. Then, as part of
my random background selector, “bkgr”, I wrote the
following…”

“There are times – say, in testing for a range of error
conditions that set different variables – when we need to know
whether a specific variable is set (has been assigned a value) or
not. True, we could test it for length, as I did above, but the
utilities provided by bash for the purpose provide convenient
shortcuts for such occasions…”

“Another built-in capability of bash, a basic mechanism for
handling arrays, allows us to process data that needs to be
indexed, or at least kept in a structure that allows individual
addressing of each of its members. Consider the following scenario:
if I have a phonebook/address list, and want to send my latest
“Sailor’s Newsletter” to everyone in the “Friends” category, how do
I do it? Furthermore, say that I also want to create a list of
names of the people I sent it to… or some other processing…
i.e., make it necessary to split it up into fields by length, and
arrays become one of the very few viable options. Let’s look at
what this might involve…”

Complete
Story

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends, & analysis