(CommandList
  children: [
    (C {(echo)} {(SQ <'--- envdir requires arguments'>)})
    (Sentence child:(C {(envdir)} {(whatever)}) terminator:<Op_Semi ';'>)
    (C {(echo)} {($ VSub_QMark '$?')})
    (C {(echo)} {(SQ <'--- envdir complains if it cannot read directory'>)})
    (C {(ln)} {(-s)} {(env1)} {(env1)})
    (Sentence child:(C {(envdir)} {(env1)} {(echo)} {(yes)}) terminator:<Op_Semi ';'>)
    (C {(echo)} {($ VSub_QMark '$?')})
    (C {(echo)} {(SQ <'--- envdir complains if it cannot read file'>)})
    (C {(rm)} {(env1)})
    (C {(mkdir)} {(env1)})
    (C {(ln)} {(-s)} {(Message)} {(env1/Message)})
    (Sentence child:(C {(envdir)} {(env1)} {(echo)} {(yes)}) terminator:<Op_Semi ';'>)
    (C {(echo)} {($ VSub_QMark '$?')})
    (C {(echo)} {(SQ <'--- envdir adds variables'>)})
    (C {(rm)} {(env1/Message)})
    (SimpleCommand
      words: [{(echo)} {(This)} {(is)} {(a)} {(test.)} {(This)} {(is)} {(only)} {(a)} {(test.)}]
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(env1/Message)} spids:[110])]
    )
    (Sentence
      child: (C {(envdir)} {(env1)} {(sh)} {(-c)} {(SQ <'echo $Message'>)})
      terminator: <Op_Semi ';'>
    )
    (C {(echo)} {($ VSub_QMark '$?')})
    (C {(echo)} {(SQ <'--- envdir removes variables'>)})
    (C {(mkdir)} {(env2)})
    (C {(touch)} {(env2/Message)})
    (Sentence
      child: (C {(envdir)} {(env1)} {(envdir)} {(env2)} {(sh)} {(-c)} {(SQ <'echo $Message'>)})
      terminator: <Op_Semi ';'>
    )
    (C {(echo)} {($ VSub_QMark '$?')})
    (C {(echo)} {(SQ <'--- envdir adds prefix'>)})
    (Sentence
      child: 
        (C {(envdir)} {(-p)} {(prefix_)} {(env1)} {(sh)} {(-c)} 
          {(SQ <'echo $Message; echo $prefix_Message'>)}
        )
      terminator: <Op_Semi ';'>
    )
    (C {(echo)} {($ VSub_QMark '$?')})
  ]
)