On Sat, Feb 14, 2015 at 1:13 PM, Robert Nichols <rnicholsNOSPAM at comcast.net> wrote: > >> But it is not 'just' expansions. You need to know the full order of >> operations with all the steps - word splitting, quote removal, i/o >> redirection, groupings, etc., some of which is repeated over the line >> after some of the other steps happen. I think I saw this in an >> understandable form for the bourne shell back in the 1980's but can't >> remember it well enough to describe and all the bash docs I've seen >> are way too convoluted to just see the order of operations as a simple >> set of steps - that you need to know before any of the rest will make >> sense. > > > It's the 4 paragraphs at the start of the "EXPANSION" section: > > Expansion is performed on the command line after it has been split into > words. There are seven kinds of expansion performed: brace expansion, > tilde expansion, parameter and variable expansion, command substitution, > arithmetic expansion, word splitting, and pathname expansion. > > The order of expansions is: brace expansion, tilde expansion, parameter, > variable and arithmetic expansion and command substitution (done in a > left-to-right fashion), word splitting, and pathname expansion. > > On systems that can support it, there is an additional expansion avail- > able: process substitution. > > Only brace expansion, word splitting, and pathname expansion can change > the number of words of the expansion; other expansions expand a single > word to a single word. The only exceptions to this are the expansions of > "$@" and "${name[@]}" as explained above (see PARAMETERS). I think that is still an oversimplification because more than expansion is involved and the order related to other steps. When does it do i/o redirection; which things happen before/during starting subshells/pipes; what if you use 'eval', etc.? -- Les Mikesell lesmikesell at gmail.com