(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PATH='> name:PATH)
          op: assign_op.Equal
          rhs: 
            {<'/usr/lib/spell'> <Id.Lit_Colon ':'> <'/usr/bin'> <Id.Lit_Colon ':'> 
              ($ Id.VSub_DollarName PATH)
            }
          spids: [89]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SPELLPROG='> name:SPELLPROG)
          op: assign_op.Equal
          rhs: {<'/usr/lib/spell/spellprog'>}
          spids: [97]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'H_SPELL='> name:H_SPELL)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                left: <Id.Left_DollarBrace '${'>
                token: <Id.VSub_Name H_SPELL>
                var_name: H_SPELL
                suffix_op: 
                  (suffix_op.Unary
                    op: <Id.VTest_ColonHyphen _>
                    arg_word: 
                      {<Id.Lit_Slash '/'> <var> <Id.Lit_Slash '/'> <adm> <Id.Lit_Slash '/'> <spellhist>}
                  )
                right: <Id.Right_DollarBrace '}'>
              )
            }
          spids: [101]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'V_SPELL='> name:V_SPELL)
          op: assign_op.Equal
          rhs: {<'/dev/null'>}
          spids: [113]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'F_SPELL='> name:F_SPELL)
          op: assign_op.Equal
          rhs: (rhs_word.Empty)
          spids: [116]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FT_SPELL='> name:FT_SPELL)
          op: assign_op.Equal
          rhs: (rhs_word.Empty)
          spids: [118]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'B_SPELL='> name:B_SPELL)
          op: assign_op.Equal
          rhs: (rhs_word.Empty)
          spids: [120]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L_SPELL='> name:L_SPELL)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'/usr/bin/sed -e '> 
                (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'/^[.\'].*[.\'][ \t]*nx[ \t]*'> <Id.Lit_BadBackslash '\\'> <'/usr'> <Id.Lit_BadBackslash '\\'> 
                <'/lib/d'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' -e '> 
                (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'/^[.\'].*[.\'][ \t]*so[ \t]*'> <Id.Lit_BadBackslash '\\'> <'/usr'> <Id.Lit_BadBackslash '\\'> 
                <'/lib/d'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' -e '> 
                (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'/^[.\'][ \t]*so[ \t]*'> <Id.Lit_BadBackslash '\\'> <'/usr'> <Id.Lit_BadBackslash '\\'> <'/lib/d'> 
                (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' -e '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'/^[.\'][ \t]*nx[ \t]*'> 
                <Id.Lit_BadBackslash '\\'> <'/usr'> <Id.Lit_BadBackslash '\\'> <'/lib/d'> 
                (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' '>
              )
            }
          spids: [122]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LOCAL='> name:LOCAL)
          op: assign_op.Equal
          rhs: (rhs_word.Empty)
          spids: [160]
        )
      ]
      redirects: []
    )
    (command.ShFunction
      name: mktmpdir
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tmpdir='> name:tmpdir)
                  op: assign_op.Equal
                  rhs: {<'/tmp/spell.'> ($ Id.VSub_Dollar '$')}
                  spids: [185]
                )
              ]
              redirects: []
            )
            (C {<trap>} {(DQ <'/usr/bin/rm -rf '> ($ Id.VSub_DollarName tmpdir) <'; exit'>)} {<0>} {<1>} 
              {<2>} {<13>} {<15>}
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<'/usr/bin/mkdir'>} {<-m>} {<700>} {($ Id.VSub_DollarName tmpdir)})
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (C {<mktmpdir>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {<-x>} {<'/usr/bin/deroff'>} {<Id.Lit_RBracket ']'>})
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DEROFF='> name:DEROFF)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ <'deroff '> 
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        ) <I_SPELL>
                      )
                    }
                  spids: [245]
                )
              ]
              redirects: []
            )
          ]
          spids: [232 242]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DEROFF='> name:DEROFF)
              op: assign_op.Equal
              rhs: {(DQ <cat>)}
              spids: [255]
            )
          ]
          redirects: []
        )
      ]
      redirects: []
    )
    (C {<set>} {<-A>} {<args>} {<xxx>} {(DQ ($ Id.VSub_At '@'))})
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<Id.Lit_LBracket '['>} 
                  {<x> 
                    (braced_var_sub
                      left: <Id.Left_DollarBrace '${'>
                      token: <Id.VSub_Name args>
                      var_name: args
                      bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName OPTIND)})
                      suffix_op: (suffix_op.Unary op:<Id.VOp1_Pound '#'> arg_word:{<Id.Lit_Other '+'>})
                      right: <Id.Right_DollarBrace '}'>
                    )
                  } {<Id.Lit_Equals '='>} 
                  {<x> 
                    (braced_var_sub
                      left: <Id.Left_DollarBrace '${'>
                      token: <Id.VSub_Name args>
                      var_name: args
                      bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName OPTIND)})
                      right: <Id.Right_DollarBrace '}'>
                    )
                  } {<Id.Lit_RBracket ']'>}
                )
                (C {<getopts>} {<ablvxi>} {<A>})
              ]
            )
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {($ Id.VSub_DollarName A)}
              arms: [
                (case_arm
                  pat_list: [{<v>}]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.AndOr
                                  ops: [Id.Op_DAmp]
                                  children: [
                                    (C {<Id.Lit_LBracket '['>} {<-r>} {<'/bin/pdp11'>} 
                                      {<Id.Lit_RBracket ']'>}
                                    )
                                    (C {<'/bin/pdp11'>})
                                  ]
                                )
                              ]
                            )
                          action: [
                            (command.Simple
                              words: [
                                {<gettext>}
                                {
                                  (DQ <'spell: -v option not supported on pdp11'> 
                                    <Id.Lit_BadBackslash '\\'> <n>
                                  )
                                }
                              ]
                              redirects: [
                                (redir
                                  op: <Id.Redir_GreatAnd '1>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              more_env: []
                              do_fork: T
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'EXIT_SPELL='>
                                      name: EXIT_SPELL
                                    )
                                  op: assign_op.Equal
                                  rhs: {(DQ <'exit 1'>)}
                                  spids: [355]
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [325 341]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'B_SPELL='> name:B_SPELL)
                              op: assign_op.Equal
                              rhs: {(DQ ($ Id.VSub_DollarName B_SPELL) <' -v'>)}
                              spids: [363]
                            )
                          ]
                          redirects: []
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'V_SPELL='> name:V_SPELL)
                              op: assign_op.Equal
                              rhs: {($ Id.VSub_DollarName tmpdir) <'/spell.'> ($ Id.VSub_Dollar '$')}
                              spids: [370]
                            )
                          ]
                          redirects: []
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [322 323 378 -1]
                )
                (case_arm
                  pat_list: [{<b>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'D_SPELL='> name:D_SPELL)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (braced_var_sub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name LB_SPELL>
                                var_name: LB_SPELL
                                suffix_op: 
                                  (suffix_op.Unary
                                    op: <Id.VTest_ColonHyphen _>
                                    arg_word: 
                                      {<Id.Lit_Slash '/'> <usr> <Id.Lit_Slash '/'> <lib> 
                                        <Id.Lit_Slash '/'> <spell> <Id.Lit_Slash '/'> <hlistb>
                                      }
                                  )
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                          spids: [384]
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'B_SPELL='> name:B_SPELL)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName B_SPELL) <' -b'>)}
                          spids: [399]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [381 382 405 -1]
                )
                (case_arm
                  pat_list: [{<x>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'B_SPELL='> name:B_SPELL)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName B_SPELL) <' -x'>)}
                          spids: [411]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [408 409 417 -1]
                )
                (case_arm
                  pat_list: [{<l>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L_SPELL='> name:L_SPELL)
                          op: assign_op.Equal
                          rhs: {(DQ <cat>)}
                          spids: [423]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [420 421 428 -1]
                )
                (case_arm
                  pat_list: [{<i>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'I_SPELL='> name:I_SPELL)
                          op: assign_op.Equal
                          rhs: {(DQ <-i>)}
                          spids: [434]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [431 432 439 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_QMark '?'>}]
                  action: [
                    (command.Simple
                      words: [
                        {<gettext>}
                        {
                          (DQ <'Usage: spell [-bvxli] [+local_file] [files...]'> 
                            <Id.Lit_BadBackslash '\\'> <n>
                          )
                        }
                      ]
                      redirects: [
                        (redir
                          op: <Id.Redir_GreatAnd '1>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<2>}
                        )
                      ]
                      more_env: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [442 443 460 -1]
                )
              ]
              redirects: []
            )
          ]
        )
      redirects: []
    )
    (C {<shift>} 
      {
        (word_part.ArithSub
          anode: 
            (arith_expr.Binary
              op_id: Id.Arith_Minus
              left: {($ Id.VSub_DollarName OPTIND)}
              right: {<Id.Lit_Digits 1>}
            )
        )
      }
    )
    (command.ForEach
      iter_names: [A]
      iterable: (for_iter.Words words:[{($ Id.VSub_Star '*')}])
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {($ Id.VSub_DollarName A)}
              arms: [
                (case_arm
                  pat_list: [{<Id.Lit_Other '+'> <Id.Lit_Star '*'>}]
                  action: [
                    (command.Sentence
                      child: 
                        (command.If
                          arms: [
                            (if_arm
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName FIRSTPLUS))} 
                                      {<Id.Lit_Equals '='>} {(DQ <'+'>)} {<Id.Lit_RBracket ']'>}
                                    )
                                  ]
                                )
                              action: [
                                (command.Simple
                                  words: [
                                    {<gettext>}
                                    {
                                      (DQ 
                                        <
'spell: multiple + options in spell, all but the last are ignored'
                                        >
                                      )
                                    }
                                  ]
                                  redirects: [
                                    (redir
                                      op: <Id.Redir_GreatAnd '1>&'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<2>}
                                    )
                                  ]
                                  more_env: []
                                  do_fork: T
                                )
                              ]
                              spids: [501 518]
                            )
                          ]
                          else_action: []
                          redirects: []
                        )
                      terminator: <Id.Op_Semi _>
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FIRSTPLUS='> name:FIRSTPLUS)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName FIRSTPLUS)) <Id.Lit_Other '+'>}
                          spids: [534]
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'LOCAL='>
                                              name: LOCAL
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (command_sub
                                                left_token: <Id.Left_Backtick '`'>
                                                child: 
                                                  (command.Simple
                                                    words: [
                                                      {<expr>}
                                                      {($ Id.VSub_DollarName A)}
                                                      {<Id.Lit_Colon ':'>}
                                                      {(SQ <'+\\(.*\\)'>)}
                                                    ]
                                                    redirects: [
                                                      (redir
                                                        op: <Id.Redir_Great '2>'>
                                                        loc: (redir_loc.Fd fd:2)
                                                        arg: {<'/dev/null'>}
                                                      )
                                                    ]
                                                    more_env: []
                                                    do_fork: T
                                                  )
                                                right: <Id.Backtick_Right '`'>
                                              )
                                            }
                                          spids: [543]
                                        )
                                      ]
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (C {<test>} {<Id.KW_Bang '!'>} {<-r>} 
                                              {($ Id.VSub_DollarName LOCAL)}
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (command.Sentence
                                      child: 
                                        (command.Simple
                                          words: [
                                            {<printf>}
                                            {
                                              (DQ 
                                                (command_sub
                                                  left_token: <Id.Left_Backtick '`'>
                                                  child: 
                                                    (C {<gettext>} {(SQ <'spell: Cannot read %s'>)})
                                                  right: <Id.Backtick_Right '`'>
                                                ) <Id.Lit_BadBackslash '\\'> <n>
                                              )
                                            }
                                            {(DQ ($ Id.VSub_DollarName LOCAL))}
                                          ]
                                          redirects: [
                                            (redir
                                              op: <Id.Redir_GreatAnd '1>&'>
                                              loc: (redir_loc.Fd fd:1)
                                              arg: {<2>}
                                            )
                                          ]
                                          more_env: []
                                          do_fork: T
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                    (command.Sentence
                                      child: 
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: 
                                                (sh_lhs_expr.Name
                                                  left: <Id.Lit_VarLike 'EXIT_SPELL='>
                                                  name: EXIT_SPELL
                                                )
                                              op: assign_op.Equal
                                              rhs: {(DQ <'exit 1'>)}
                                              spids: [607]
                                            )
                                          ]
                                          redirects: []
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                  spids: [569 581]
                                )
                              ]
                              else_action: []
                              redirects: []
                            )
                          ]
                          spids: [541 567]
                        )
                      ]
                      else_action: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              words: [
                                {<gettext>}
                                {
                                  (DQ <'spell: Cannot identify local spell file'> 
                                    <Id.Lit_BadBackslash '\\'> <n>
                                  )
                                }
                              ]
                              redirects: [
                                (redir
                                  op: <Id.Redir_GreatAnd '1>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              more_env: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                        (command.Sentence
                          child: 
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'EXIT_SPELL='>
                                      name: EXIT_SPELL
                                    )
                                  op: assign_op.Equal
                                  rhs: {(DQ <'exit 1'>)}
                                  spids: [631]
                                )
                              ]
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [497 499 640 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FT_SPELL='> name:FT_SPELL)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName FT_SPELL) <' '> ($ Id.VSub_DollarName A))}
                          spids: [646]
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} {<-r>} {($ Id.VSub_DollarName A)} 
                                      {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'F_SPELL='>
                                      name: F_SPELL
                                    )
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ($ Id.VSub_DollarName F_SPELL) <' '> ($ Id.VSub_DollarName A))
                                    }
                                  spids: [668]
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [654 665]
                        )
                      ]
                      else_action: [
                        (command.Simple
                          words: [
                            {<printf>}
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_Backtick '`'>
                                  child: (C {<gettext>} {(SQ <'spell: Cannot read file %s'>)})
                                  right: <Id.Backtick_Right '`'>
                                ) <Id.Lit_BadBackslash '\\'> <n>
                              )
                            }
                            {(DQ ($ Id.VSub_DollarName A))}
                          ]
                          redirects: [
                            (redir
                              op: <Id.Redir_GreatAnd '1>&'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<2>}
                            )
                          ]
                          more_env: []
                          do_fork: T
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [643 644 -1 706]
                )
              ]
              redirects: []
            )
          ]
        )
      redirects: []
    )
    (C 
      {
        (braced_var_sub
          left: <Id.Left_DollarBrace '${'>
          token: <Id.VSub_Name EXIT_SPELL>
          var_name: EXIT_SPELL
          suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<':'>})
          right: <Id.Right_DollarBrace '}'>
        )
      }
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {(DQ <x> ($ Id.VSub_DollarName FT_SPELL))} 
                          {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <x> ($ Id.VSub_DollarName F_SPELL))} {<Id.Lit_RBracket ']'>}
                        )
                        (C {<Id.Lit_LBracket '['>} {(DQ <x> ($ Id.VSub_DollarName F_SPELL))} 
                          {<Id.Lit_Equals '='>} {(DQ <x>)} {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})]
          spids: [717 754]
        )
      ]
      else_action: []
      redirects: []
    )
    (command.Pipeline
      children: [
        (command.Subshell
          child: 
            (command.CommandList
              children: [
                (command.Sentence
                  child: (C {<cat>} {($ Id.VSub_DollarName F_SPELL)})
                  terminator: <Id.Op_Semi _>
                )
                (command.Sentence
                  child: (C {<printf>} {(DQ <Id.Lit_BadBackslash '\\'> <n>)})
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          redirects: []
        )
        (C {<eval>} {($ Id.VSub_DollarName L_SPELL)})
        (C {<eval>} {($ Id.VSub_DollarName DEROFF)})
        (command.Simple
          words: [
            {<'/usr/bin/tr'>}
            {<-cs>}
            {
              (DQ <'[A-Z][a-z][0-9]'> <Id.Lit_BadBackslash '\\'> <'\''> <Id.Lit_BadBackslash '\\'> <'&'> 
                <Id.Lit_BadBackslash '\\'> <.> <Id.Lit_BadBackslash '\\'> <','> <Id.Lit_BadBackslash '\\'> <';'> <Id.Lit_BadBackslash '\\'> <'?'> 
                <Id.Lit_BadBackslash '\\'> <':'>
              )
            }
            {(DQ <'['> <Id.Lit_BadBackslash '\\'> <'012*]'>)}
          ]
          redirects: []
          more_env: [(env_pair name:LC_ALL val:{<C>} spids:[795])]
          do_fork: T
        )
        (C {<'/usr/bin/sed'>} {(SQ <'1,$s/^[^A-Za-z0-9]*//'>)})
        (C {<'/usr/bin/sed'>} {(SQ <'1,$s/[^A-Za-z0-9]*$//'>)})
        (C {<'/usr/bin/sed'>} {<-n>} {(DQ <'/[A-Za-z]/p'>)})
        (C {<'/usr/bin/sort'>} {<-u>} {<Id.Lit_Other '+'> <0>})
        (C {($ Id.VSub_DollarName SPELLPROG)} 
          {
            (braced_var_sub
              left: <Id.Left_DollarBrace '${'>
              token: <Id.VSub_Name S_SPELL>
              var_name: S_SPELL
              suffix_op: 
                (suffix_op.Unary
                  op: <Id.VTest_ColonHyphen _>
                  arg_word: 
                    {<Id.Lit_Slash '/'> <usr> <Id.Lit_Slash '/'> <lib> <Id.Lit_Slash '/'> <spell> 
                      <Id.Lit_Slash '/'> <hstop>
                    }
                )
              right: <Id.Right_DollarBrace '}'>
            )
          } {<1>}
        )
        (C {($ Id.VSub_DollarName SPELLPROG)} {($ Id.VSub_DollarName B_SPELL)} 
          {
            (braced_var_sub
              left: <Id.Left_DollarBrace '${'>
              token: <Id.VSub_Name D_SPELL>
              var_name: D_SPELL
              suffix_op: 
                (suffix_op.Unary
                  op: <Id.VTest_ColonHyphen _>
                  arg_word: 
                    {<Id.Lit_Slash '/'> <usr> <Id.Lit_Slash '/'> <lib> <Id.Lit_Slash '/'> <spell> 
                      <Id.Lit_Slash '/'> <hlista>
                    }
                )
              right: <Id.Right_DollarBrace '}'>
            )
          } {($ Id.VSub_DollarName V_SPELL)}
        )
        (C {<comm>} {<-23>} {<->} 
          {
            (braced_var_sub
              left: <Id.Left_DollarBrace '${'>
              token: <Id.VSub_Name LOCAL>
              var_name: LOCAL
              suffix_op: 
                (suffix_op.Unary
                  op: <Id.VTest_ColonHyphen _>
                  arg_word: {<Id.Lit_Slash '/'> <dev> <Id.Lit_Slash '/'> <null>}
                )
              right: <Id.Right_DollarBrace '}'>
            )
          }
        )
        (C {<tee>} {<-a>} {($ Id.VSub_DollarName H_SPELL)})
      ]
      negated: F
      stderr_indices: []
    )
    (command.Simple
      words: [{<'/usr/bin/who'>} {<am>} {<i>}]
      redirects: [
        (redir
          op: <Id.Redir_DGreat '>>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName H_SPELL)}
        )
        (redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})
      ]
      more_env: []
      do_fork: T
    )
    (command.Case
      to_match: {($ Id.VSub_DollarName V_SPELL)}
      arms: [
        (case_arm
          pat_list: [{<'/dev/null'>}]
          action: [(command.ControlFlow token:<Id.ControlFlow_Exit exit>)]
          spids: [950 951 -1 956]
        )
      ]
      redirects: []
    )
    (command.Pipeline
      children: [
        (C {<'/usr/bin/sed'>} {(SQ <'/^\\./d'>)} {($ Id.VSub_DollarName V_SPELL)})
        (C {<'/usr/bin/sort'>} {<-u>} {<Id.Lit_Other '+'> <1f>} {<Id.Lit_Other '+'> <0>})
      ]
      negated: F
      stderr_indices: []
    )
  ]
)