Learning the Korn Shell, 2nd Edition by Bill Rosenblatt, Arnold Robbins This errata page lists errors outstanding in the most recent printing. If you have technical questions or error reports, you can send them to booktech@oreilly.com. Please specify the printing date of your copy. This page was updated January 17, 2006. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification Confirmed errors: [xvi] 4th paragraph under About the Second Edition; Remove: "SSC sells a four-color...for more information." {112} 11th line; I believe that the line that says filename=${filename:?"missing."} needs to instead read filename=${filename:?"filename missing."} to result in the messge printed two lines later: highest: line 2: filename: filename missing. AUTHOR: The correct change is to fix the error message: highest: line 2: filename: missing. Thanks for reporting this. FYI, ksh93m+ gets it wrong, alas: $ cat foo.ksh #! /home/arnold/bin/ksh93 filename=$1 filename=${filename:?"missing"} $ foo.ksh a $ foo.ksh ./foo.ksh: line 4: missing: missing Bash gets it right: $ bash foo.ksh foo.ksh: line 4: filename: missing (123) 2nd paragraph from bottom, 3rd sentence; "basename is less efficient thatn ${variable##/*}" should be: "basename is less efficient thatn ${variable##*/}" (150) bottom, in the script; There is: DIRSTACK="$dirname DIRSTACK" that doesn't replace DIRSTACK (between double quotes) by its value. instead of: DIRSTACK="$dirname $DIRSTACK" that replace DIRSTACK (between double quotes) by its value.