Preface
. . . That No One Will Ever Read
Research indicates that virtually no one actually reads prefaces in computer books. In fact, this preface could be about the Loch Ness Monster for all most readers care.
But why don't people read prefaces? Is it because prefaces sometimes get too personal? (". . . and I want to thank Sal, who made this book possible.") Is it because the sentiments of nerdy authors can be a bit repulsive? (". . . Sal, my SparcStation, was always there when I needed her.") Is it because they are predictably self-deprecatory in an ironic way? (". . . and I want to thank: list of 250 noted experts goes here for reviewing drafts of this manual. Naturally all mistakes are my own.") No, when it comes right down to it, people avoid prefaces because they're boring.
It is also de rigueur for the nerdish author to explain, folksinger style, why he or she decided to write this piece. I guess this book sort of came to me while I was camping out in the glorious Rocky Mountains. I was gazing at pristine waterfalls and awe-inspiring sunsets when I said to myself, "This land must be preserved: I shall write a KornShell book." Possessed by a demonic ecological fervor, I roared down that mountain in a snowmobile, fired up a 1200-watt workstation, and wrote it all down for you. I only ask that you use the power of the KornShell for good, rather than evil.
Through the years, I've been lucky enough to get lots of feedback from my readers. What do you think they ask for? More text? No. More syntax? Definitely not. When it comes right down to it, readers consistently ask for only one thing: more examples.
So, I listened to them and based this tutorial entirely on examples. I feel that short, focused examples are more valuable than long, detailed examples, and I've written the book accordingly. The purpose of the book is not to make me look clever; it is to make you look clever. Nevertheless, I've sprinkled a few lengthy examples into the mix for those of you who enjoy that sort of thing.
When I was a mere lad, my family doctor pointed to a massive encyclopedia of pharmaceuticals and told me that he could treat 90 percent of all patients with only six different medicines. Similarly, although the KornShell is a very rich language, my goal is to focus on the common script ailments and to leave the beriberi treatment to specialists.
Beginners may be wondering, "Is this book too hard for me?" No, probably not. Programmers experienced in various languages, though not in the KornShell, are probably wondering, "Is this book too wimpy for me?" No, probably not. To help guide both kinds of readers through the book, I've marked certain sections as being more appropriate for one group or the other. Many beginners need an explanation of loops, while experienced programmers need to know how KornShell loops differ from loops in other languages.
Since the KornShell runs on all sorts of operating systems, I've tried to keep operating system dependencies to a bare minimum. Nevertheless, I do assume that readers are either working directly on the UNIX operating system or indirectly on UNIX through a package like U/WIN.
My three primary reviewers were KornShell gurus David Korn, Steve Sommars, and Glenn Fowler, all of whom gave fantastic and diplomatic criticism.
I also received important criticism and help from Tom Barstow, Dave Beckedorff, Bart Hanlon, Warren Johnson, Ed Johnston, Mark Keil, Mike Kong, Alice Lynch, Dave Penfield, Will Roaf, Frank Rubinsky, John Weiss, Daryl Winters, Teri Witham, and other people whose names I have no doubt forgotten to list. Eric Eldred and Quentin Sullivan found so many bugs in early drafts that, and I mean this as a compliment, they should have a brand of insecticide named after them.
Judy Tarutz is my long-suffering editor. In person, Judy is a kind, gentle soul with an outrageous sense of humor. Give her a red pen, though, and she turns into Conan the Barbarian. Her savage red pen cut a bloody swath through early drafts of this book. If we should chance to meet up one day, dear reader, I'll tell you all the "weak" jokes she made me take out.
I'd also like to thank the members of the Academy.
A consortium of great minds--those minds owned and operated by Ted Ricks, John Wait, Jack Danahy, and Steve Spice--led me to the KornShell and helped me define the material for this book.
Finally, I'd like to thank the person who really made this book possible: my wife and best friend, Marilyn.
Whoops, almost forgot. Naturally, all mistakes are my own.
Author's Note Regarding the ksh93 Edition
It has been a very long time since I wrote the ksh88 edition, entitled KornShell Programming Tutorial. I began to suspect as much when I noticed that of all the people acknowledged in this Preface, and I'm sure they were capital reviewer--intelligent, meticulous, helpful--the only familiar name was my wife's.
But how to resurrect a vanished book? All traces of the ksh88 edition had disappeared until 1997, when a fragment was found suspended in a piece of amber at a Chinese restaurant in Palo Alto. Working round the clock, scientists at Addison Wesley Longman were able to piece together most of the old book. When gaps were found, DNA sequences from Kernighan and Ritchie were substituted.
After reading KornShell Programming Tutorial, many readers asked me important questions such as, "How does a joke get to be in your book?" or "Couldn't you just write a preface next time and skip the rest of the stuff that came after it?" or "Did you hear the one about the traveling KornShell salesman and the system administrator's daughter?"
Actually, creating humor for this book is not as haphazard as it may seem. All jokes are put through a rigorous five-step Beta testing procedure. I need to ensure that a joke is just as funny on the tenth reading as it is on the first. Although not all Beta testers installed the jokes, I did get enough feedback to toss out a ridiculous amount of material, for example, the original start of Chapter 1 went like this:
I first saw David Korn writing shell scripts in a small club in the Village in 1946. The post-War euphoria was contagious and it wasn't long before the whole room was up and swaying to a pounding UNIX beat.
In a second edition, the author is obliged to correct the occasional error or two that cropped up in the first edition. (A special note to all of you at the Strategic Air Command--you're absolutely right guys, it was supposed to be a comma, not a semicolon.) A pair of translators, Hideyuki Hayashi and Masataka Isoya, get the credit for finding the most mistakes in the ksh88 edition. These two were incredibly rigorous and could not have been more diplomatic. ("Barry-San, every word on page 233 appears to be a typo.") Yep, the truth is out there, but a lot of it failed to work its way into the ksh88 edition. To improve accuracy, Sarah Tuttle wrote a validation suite that tests most of the sample KornShell scripts appearing in this book.
When I wrote the KornShell Programming Tutorial book, KornShell88 was beginning to make KornShell86 obsolete. As I go to press with this book, Hands-On KornShell93 Programming, KornShell93 is starting to overtake KornShell88. The KornShell93 scripts are far richer than KornShell88, and I've focused this book completely on KornShell93. If you liked KornShell88, you're going to love KornShell93.
Several reviewers strongly suggested a chapter on CGI programming with KornShell. As an avid CGI programmer, I happily agreed.
The CD accompanying this book contains the U/WIN p