Throughout the book we’ve seen a variety of ways in which the shell processes input lines, especially using read. We can think of this process as a subset of the things the shell does when processing command lines. This appendix provides a more detailed description of the steps involved in processing the command line and how you can get bash to make a second pass with eval. The material in this appendix also appears in Learning the bash Shell, 3rd Edition, by Cameron Newham (O’Reilly).
We’ve touched upon command-line processing throughout this book; we’ve mentioned how bash deals with single quotes (
''), double quotes (
""), and backslashes (
\); how it separates characters on a line into words, even allowing you to specify the delimiter it uses via the environment variable
$IFS; how it assigns the words to shell variables (e.g.,
$1, $2, etc); and how it can redirect input and output to/from files or other processes (pipelines). In order to be a real expert at shell scripting (or to debug some gnarly problems), you’ll need to understand the various steps involved in command-line processing—especially the order in which they occur.
Each line that the shell reads from STDIN or from a script is called a pipeline because it contains one or more commands separated by zero or more pipe characters (
|). Figure C-1 shows the steps in command-line processing.
For each pipeline ...