(command.CommandList
  children: [
    (command.Case
      case_kw: <Id.KW_Case case>
      to_match: 
        (case_arg.Word
          w: {($ Id.VSub_Hyphen -) <Id.Lit_Colon ':'> ($ Id.VSub_DollarName BASH_VERSION)}
        )
      arms_start: <Id.KW_In in>
      arms: [
        (CaseArm
          left: <Id.Lit_Star '*'>
          pattern: 
            (pat.Words
              words: [
                {<Id.Lit_Star '*'> <x> <Id.Lit_Star '*'> <Id.Lit_Colon ':'> <Id.Lit_LBracket '['> 
                  <0123456789> <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>
                }
              ]
            )
          middle: <Id.Right_CasePat _>
          action: [
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [
                    {<Id.Lit_Colon ':'>}
                    {<bash>}
                    {<set>}
                    {<-x>}
                    {<is>}
                    {<broken>}
                    {<Id.Lit_Colon ':'>}
                  ]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <set>
                  more_env: []
                  words: [{<set>} {<Id.Lit_Other '+'> <ex>}]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'old='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'old='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old)
                  op: assign_op.Equal
                  rhs: {<1>}
                )
              ]
              redirects: []
            )
          ]
          right: <Id.Op_DSemi _>
        )
        (CaseArm
          left: <Id.Lit_Star '*'>
          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
          middle: <Id.Right_CasePat _>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'old='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'old='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old)
                  op: assign_op.Equal
                  rhs: (rhs_word__Empty)
                )
              ]
              redirects: []
            )
          ]
          right: <Id.Op_DSemi _>
        )
      ]
      arms_end: <Id.KW_Esac esac>
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'command='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'command='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'command='> name:command)
          op: assign_op.Equal
          rhs: {<ppcc>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'clobber='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'clobber='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'clobber='> name:clobber)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'doti='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'doti='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'doti='> name:doti)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'exec='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'exec='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'exec='> name:exec)
          op: assign_op.Equal
          rhs: {<1>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'linki='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'linki='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'linki='> name:linki)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'multiopt='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'multiopt='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'multiopt='> name:multiopt)
          op: assign_op.Equal
          rhs: {<o>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'post='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'post='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'post='> name:post)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'ppfile='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'ppfile='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ppfile='> name:ppfile)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'ppld='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'ppld='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ppld='> name:ppld)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'ppstdout='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'ppstdout='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ppstdout='> name:ppstdout)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'src1='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'src1='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'src1='> name:src1)
          op: assign_op.Equal
          rhs: {(DQ <'*.[cCsS]'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'src2='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'src2='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'src2='> name:src2)
          op: assign_op.Equal
          rhs: {(DQ <'*.[cC][xX][xX]'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'src3='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'src3='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'src3='> name:src3)
          op: assign_op.Equal
          rhs: {(DQ <'*.[cC][pP][pP]'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'src4='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'src4='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'src4='> name:src4)
          op: assign_op.Equal
          rhs: {(DQ <'*.[aA][sS][mM]'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'tmp='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'tmp='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tmp='> name:tmp)
          op: assign_op.Equal
          rhs: {<'/tmp/pC'> ($ Id.VSub_Dollar '$')}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'verbose='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'verbose='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'verbose='> name:verbose)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'usage='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'usage='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'usage='> name:usage)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'Usage: '> ($ Id.VSub_DollarName command) 
                <' [ -nv ] [ -o dialect-option ] pp-command ... cc-command ...'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Simple
              blame_tok: <Id.Lit_Colon ':'>
              more_env: []
              words: [{<Id.Lit_Colon ':'>}]
              redirects: []
              do_fork: T
            )
          ]
        )
      body: 
        (command.DoGroup
          left: <Id.KW_Do do>
          children: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_Pound '#')})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <0>
                  pattern: (pat.Words words:[{<0>}])
                  middle: <Id.Right_CasePat _>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <-o>
                  pattern: (pat.Words words:[{<-o> <Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <-o>
                          pattern: (pat.Words words:[{<-o>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_Pound '#')})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <1>
                                  pattern: (pat.Words words:[{<1>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.Simple
                                      blame_tok: <echo>
                                      more_env: []
                                      words: [{<echo>} {(DQ ($ Id.VSub_DollarName usage))}]
                                      redirects: [
                                        (Redir
                                          op: <Id.Redir_GreatAnd '>&'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {<2>}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Exit exit>
                                      arg_word: {<2>}
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'opt='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'opt='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt='> name:opt)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_Number 1)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName RANDOM)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.VSub_DollarName '$RANDOM'>
                                  pattern: (pat.Words words:[{($ Id.VSub_DollarName RANDOM)}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'opt='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'opt='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'opt='>
                                              name: opt
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (CommandSub
                                                left_token: <Id.Left_Backtick '`'>
                                                child: 
                                                  (command.Pipeline
                                                    children: [
                                                      (command.Simple
                                                        blame_tok: <echo>
                                                        more_env: []
                                                        words: [{<echo>} {<x> ($ Id.VSub_Number 1)}]
                                                        redirects: []
                                                        do_fork: T
                                                      )
                                                      (command.Simple
                                                        blame_tok: <sed>
                                                        more_env: []
                                                        words: [{<sed>} {<'s/...//'>}]
                                                        redirects: []
                                                        do_fork: T
                                                      )
                                                    ]
                                                    ops: [<Id.Op_Pipe _>]
                                                  )
                                                right: <Id.Backtick_Right '`'>
                                              )
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                                (CaseArm
                                  left: <Id.Lit_Star '*'>
                                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'opt='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'opt='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'opt='>
                                              name: opt
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (BracedVarSub
                                                left: <Id.Left_DollarBrace '${'>
                                                token: <Id.VSub_Number 1>
                                                var_name: 1
                                                suffix_op: 
                                                  (suffix_op.Unary
                                                    op: <Id.VOp1_Pound '#'>
                                                    arg_word: {<Id.Lit_Other '?'> <Id.Lit_Other '?'>}
                                                  )
                                                right: <Id.Right_DollarBrace '}'>
                                              )
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName opt)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <NO>
                          pattern: 
                            (pat.Words
                              words: [{<NO> <Id.Lit_Star '*'>} {<no> <Id.Lit_Star '*'>}]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'value='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'value='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'value='> name:value)
                                  op: assign_op.Equal
                                  rhs: (rhs_word__Empty)
                                )
                              ]
                              redirects: []
                            )
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName RANDOM)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.VSub_DollarName '$RANDOM'>
                                  pattern: (pat.Words words:[{($ Id.VSub_DollarName RANDOM)}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'opt='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'opt='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'opt='>
                                              name: opt
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (CommandSub
                                                left_token: <Id.Left_Backtick '`'>
                                                child: 
                                                  (command.Pipeline
                                                    children: [
                                                      (command.Simple
                                                        blame_tok: <echo>
                                                        more_env: []
                                                        words: [{<echo>} {($ Id.VSub_DollarName opt)}]
                                                        redirects: []
                                                        do_fork: T
                                                      )
                                                      (command.Simple
                                                        blame_tok: <sed>
                                                        more_env: []
                                                        words: [{<sed>} {<'s/..//'>}]
                                                        redirects: []
                                                        do_fork: T
                                                      )
                                                    ]
                                                    ops: [<Id.Op_Pipe _>]
                                                  )
                                                right: <Id.Backtick_Right '`'>
                                              )
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                                (CaseArm
                                  left: <Id.Lit_Star '*'>
                                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'opt='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'opt='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'opt='>
                                              name: opt
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (BracedVarSub
                                                left: <Id.Left_DollarBrace '${'>
                                                token: <Id.VSub_Number 1>
                                                var_name: 1
                                                suffix_op: 
                                                  (suffix_op.Unary
                                                    op: <Id.VOp1_Pound '#'>
                                                    arg_word: {<Id.Lit_Other '?'> <Id.Lit_Other '?'>}
                                                  )
                                                right: <Id.Right_DollarBrace '}'>
                                              )
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName opt)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Lit_Star '*'>
                                  pattern: 
                                    (pat.Words
                                      words: [
                                        {<Id.Lit_Star '*'> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}
                                      ]
                                    )
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.Case
                                      case_kw: <Id.KW_Case case>
                                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName RANDOM)})
                                      arms_start: <Id.KW_In in>
                                      arms: [
                                        (CaseArm
                                          left: <Id.VSub_DollarName '$RANDOM'>
                                          pattern: 
                                            (pat.Words
                                              words: [{($ Id.VSub_DollarName RANDOM)}]
                                            )
                                          middle: <Id.Right_CasePat _>
                                          action: [
                                            (command.Simple
                                              blame_tok: <eval>
                                              more_env: []
                                              words: [
                                                {<eval>}
                                                {
                                                  (CommandSub
                                                    left_token: <Id.Left_Backtick '`'>
                                                    child: 
                                                      (command.Pipeline
                                                        children: [
                                                          (command.Simple
                                                            blame_tok: <echo>
                                                            more_env: []
                                                            words: [
                                                              {<echo>}
                                                              {($ Id.VSub_DollarName opt)}
                                                            ]
                                                            redirects: []
                                                            do_fork: T
                                                          )
                                                          (command.Simple
                                                            blame_tok: <sed>
                                                            more_env: []
                                                            words: [
                                                              {<sed>}
                                                              {(SQ <'s/\\([^=]*\\)/opt=\\1 value/'>)}
                                                            ]
                                                            redirects: []
                                                            do_fork: T
                                                          )
                                                        ]
                                                        ops: [<Id.Op_Pipe _>]
                                                      )
                                                    right: <Id.Backtick_Right '`'>
                                                  )
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          ]
                                          right: <Id.Op_DSemi _>
                                        )
                                        (CaseArm
                                          left: <Id.Lit_Star '*'>
                                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                                          middle: <Id.Right_CasePat _>
                                          action: [
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'value='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'value='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'value='>
                                                      name: value
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (BracedVarSub
                                                        left: <Id.Left_DollarBrace '${'>
                                                        token: <Id.VSub_Name opt>
                                                        var_name: opt
                                                        suffix_op: 
                                                          (suffix_op.Unary
                                                            op: <Id.VOp1_Pound '#'>
                                                            arg_word: {<Id.Lit_Other '*'> <'='>}
                                                          )
                                                        right: <Id.Right_DollarBrace '}'>
                                                      )
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'opt='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'opt='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'opt='>
                                                      name: opt
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (BracedVarSub
                                                        left: <Id.Left_DollarBrace '${'>
                                                        token: <Id.VSub_Name opt>
                                                        var_name: opt
                                                        suffix_op: 
                                                          (suffix_op.Unary
                                                            op: <Id.VOp1_DPercent '%%'>
                                                            arg_word: {<'='> <Id.Lit_Other '*'>}
                                                          )
                                                        right: <Id.Right_DollarBrace '}'>
                                                      )
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                          ]
                                          right: <Id.Op_DSemi _>
                                        )
                                      ]
                                      arms_end: <Id.KW_Esac esac>
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                                (CaseArm
                                  left: <Id.Lit_Star '*'>
                                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'value='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'value='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'value='>
                                              name: value
                                            )
                                          op: assign_op.Equal
                                          rhs: {<1>}
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName opt)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <C>
                          pattern: 
                            (pat.Words
                              words: [
                                {<C> <Id.Lit_Other '+'> <Id.Lit_Other '+'>}
                                {<c> <Id.Lit_Other '+'> <Id.Lit_Other '+'>}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'ppld='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'ppld='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ppld='> name:ppld)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName value)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <DOTI>
                          pattern: (pat.Words words:[{<DOTI>} {<doti>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'doti='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'doti='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'doti='> name:doti)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName value)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <LINKI>
                          pattern: (pat.Words words:[{<LINKI>} {<linki>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'linki='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'linki='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'linki='> name:linki)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName value)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <MULTI>
                          pattern: (pat.Words words:[{<MULTI>} {<multi>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName value)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Left_DoubleQuote '"'>
                                  pattern: (pat.Words words:[{(DQ )}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'multiopt='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'multiopt='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'multiopt='>
                                              name: multiopt
                                            )
                                          op: assign_op.Equal
                                          rhs: (rhs_word__Empty)
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                                (CaseArm
                                  left: <Id.Lit_Star '*'>
                                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'multiopt='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'multiopt='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'multiopt='>
                                              name: multiopt
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {($ Id.VSub_DollarName multiopt) 
                                              ($ Id.VSub_DollarName value)
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <PPLD>
                          pattern: (pat.Words words:[{<PPLD>} {<ppld>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'ppld='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'ppld='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ppld='> name:ppld)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName value)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <exec>
                          pattern: (pat.Words words:[{<exec>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'exec='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'exec='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'exec='> name:exec)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName value)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <verbose>
                          pattern: (pat.Words words:[{<verbose>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'verbose='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'verbose='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'verbose='>
                                      name: verbose
                                    )
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName value)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <->
                  pattern: (pat.Words words:[{<-> <Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <->
                          pattern: 
                            (pat.Words
                              words: [
                                {<-> <Id.Lit_Star '*'> <Id.Lit_LBracket '['> <Id.KW_Bang '!'> <iklnvO> 
                                  <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {(DQ ($ Id.VSub_DollarName usage))}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                              arg_word: {<2>}
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'> <i> <Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'doti='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'doti='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'doti='> name:doti)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'> <k> <Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'doti='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'doti='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'doti='> name:doti)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                                (AssignPair
                                  left: <Id.Lit_VarLike 'linki='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'linki='> name:linki)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'> <l> <Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'ppld='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'ppld='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ppld='> name:ppld)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'> <n> <Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'exec='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'exec='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'exec='> name:exec)
                                  op: assign_op.Equal
                                  rhs: (rhs_word__Empty)
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'> <v> <Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'verbose='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'verbose='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'verbose='>
                                      name: verbose
                                    )
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'> <O> <Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'old='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'old='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.Simple
              blame_tok: <shift>
              more_env: []
              words: [{<shift>}]
              redirects: []
              do_fork: T
            )
          ]
          right: <Id.KW_Done done>
        )
      redirects: []
    )
    (command.Case
      case_kw: <Id.KW_Case case>
      to_match: (case_arg.Word w:{($ Id.VSub_Pound '#')})
      arms_start: <Id.KW_In in>
      arms: [
        (CaseArm
          left: <0>
          pattern: (pat.Words words:[{<0>}])
          middle: <Id.Right_CasePat _>
          action: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_DollarName usage))}]
              redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<2>})
          ]
          right: <Id.Op_DSemi _>
        )
      ]
      arms_end: <Id.KW_Esac esac>
      redirects: []
    )
    (command.Simple
      blame_tok: <trap>
      more_env: []
      words: [
        {<trap>}
        {
          (SQ <'\tstatus=$?\n'> <'\ttrap "" 0\n'> <'\tcase $clobber in\n'> <'\t?*)\tcase $verbose in\n'> 
            <'\t\t1)\techo + rm -rf $clobber ;;\n'> <'\t\tesac\n'> <'\t\tcase $exec in\n'> <'\t\t1)\trm -rf $clobber ;;\n'> <'\t\tesac\n'> <'\t\t;;\n'> 
            <'\tesac\n'> <'\tcase $post in\n'> <'\t?*)\tcase $verbose in\n'> <'\t\t1)\techo + $post ;;\n'> <'\t\tesac\n'> 
            <'\t\tcase $exec in\n'> <'\t\t1)\teval "$post" ;;\n'> <'\t\tesac\n'> <'\t\t;;\n'> <'\tesac\n'> <'\texit $status\n'>
          )
        }
        {<0>}
        {<1>}
        {<2>}
        {<3>}
        {<15>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Case
      case_kw: <Id.KW_Case case>
      to_match: (case_arg.Word w:{($ Id.VSub_DollarName old)})
      arms_start: <Id.KW_In in>
      arms: [
        (CaseArm
          left: <Id.Left_SingleQuote '\''>
          pattern: (pat.Words words:[{(SQ )}])
          middle: <Id.Right_CasePat _>
          action: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: 
                (case_arg.Word
                  w: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Subshell
                            left: <Id.Op_LParen _>
                            child: 
                              (command.CommandList
                                children: [
                                  (command.Sentence
                                    child: 
                                      (command.Simple
                                        blame_tok: <set>
                                        more_env: []
                                        words: [{<set>} {<-A>} {<a>} {<no>} {<ok>}]
                                        redirects: []
                                        do_fork: T
                                      )
                                    terminator: <Id.Op_Semi _>
                                  )
                                  (command.Sentence
                                    child: 
                                      (command.DParen
                                        left: <Id.Op_DLeftParen _>
                                        child: 
                                          (arith_expr.BinaryAssign
                                            op_id: Id.Arith_Equal
                                            left: ($ Id.Lit_ArithVarLike b)
                                            right: 
                                              (arith_expr.Binary
                                                op_id: Id.Arith_Plus
                                                left: {<Id.Lit_Digits 1>}
                                                right: {<Id.Lit_Digits 1>}
                                              )
                                          )
                                        right: <Id.Op_DRightParen _>
                                        redirects: []
                                      )
                                    terminator: <Id.Op_Semi _>
                                  )
                                  (command.Simple
                                    blame_tok: <echo>
                                    more_env: []
                                    words: [
                                      {<echo>}
                                      {
                                        (DQ 
                                          (BracedVarSub
                                            left: <Id.Left_DollarBrace '${'>
                                            token: <Id.VSub_Name a>
                                            var_name: a
                                            bracket_op: 
                                              (bracket_op.ArrayIndex
                                                expr: {<Id.Lit_Digits 1>}
                                              )
                                            right: <Id.Right_DollarBrace '}'>
                                          ) ($ Id.VSub_DollarName b)
                                        )
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                ]
                              )
                            right: <Id.Right_Subshell _>
                            redirects: [
                              (Redir
                                op: <Id.Redir_Great '2>'>
                                loc: (redir_loc.Fd fd:2)
                                arg: {<'/dev/null'>}
                              )
                            ]
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <ok2>
                  pattern: (pat.Words words:[{<ok2>}])
                  middle: <Id.Right_CasePat _>
                  action: []
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'old='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'old='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old)
                          op: assign_op.Equal
                          rhs: {<1>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          right: <Id.Op_DSemi _>
        )
      ]
      arms_end: <Id.KW_Esac esac>
      redirects: []
    )
    (command.Case
      case_kw: <Id.KW_Case case>
      to_match: 
        (case_arg.Word
          w: {($ Id.VSub_DollarName old) <Id.Lit_Colon ':'> ($ Id.VSub_DollarName RANDOM)}
        )
      arms_start: <Id.KW_In in>
      arms: [
        (CaseArm
          left: <Id.Lit_Star '*'>
          pattern: 
            (pat.Words
              words: [
                {<Id.Lit_Star '*'> <Id.Lit_Colon ':'> ($ Id.VSub_DollarName RANDOM)}
                {<1> <Id.Lit_Colon ':'> <Id.Lit_Star '*'>}
              ]
            )
          middle: <Id.Right_CasePat _>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'nfile='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'nfile='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nfile='> name:nfile)
                  op: assign_op.Equal
                  rhs: (rhs_word__Empty)
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {(SQ )} {(DQ ($ Id.VSub_At '@'))} {(SQ )} {(DQ ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Simple
                      blame_tok: <Id.Lit_Colon ':'>
                      more_env: []
                      words: [{<Id.Lit_Colon ':'>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Lit_LBracket '['>
                          pattern: 
                            (pat.Words
                              words: [
                                {<Id.Lit_LBracket '['> <-> <Id.Lit_Other '+'> <Id.Lit_RBracket ']'> 
                                  <Id.Lit_Star '*'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {(SQ )} {(DQ ($ Id.VSub_At '@'))} {(DQ ($ Id.VSub_Number 1))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Simple
                      blame_tok: <Id.Lit_Colon ':'>
                      more_env: []
                      words: [{<Id.Lit_Colon ':'>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'arg='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'arg='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number 1)}
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName arg)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Left_SingleQuote '\''>
                          pattern: (pat.Words words:[{(SQ )}])
                          middle: <Id.Right_CasePat _>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <->
                          pattern: 
                            (pat.Words
                              words: [
                                {<-> <Id.Lit_LBracket '['> ($ Id.VSub_DollarName multiopt) 
                                  <Id.Lit_RBracket ']'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Lit_QMark '?'>
                                  pattern: (pat.Words words:[{<Id.Lit_QMark '?'> <Id.Lit_Star '*'>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.Simple
                                      blame_tok: <set>
                                      more_env: []
                                      words: [
                                        {<set>}
                                        {(SQ )}
                                        {(DQ ($ Id.VSub_At '@'))}
                                        {(DQ ($ Id.VSub_DollarName arg))}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <shift>
                                      more_env: []
                                      words: [{<shift>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'arg='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'arg='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'arg='>
                                              name: arg
                                            )
                                          op: assign_op.Equal
                                          rhs: {($ Id.VSub_Number 1)}
                                        )
                                      ]
                                      redirects: []
                                    )
                                    (command.Simple
                                      blame_tok: <shift>
                                      more_env: []
                                      words: [{<shift>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <-E>
                          pattern: (pat.Words words:[{<-E>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'ppstdout='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'ppstdout='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'ppstdout='>
                                      name: ppstdout
                                    )
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'doti='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'doti='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'doti='> name:doti)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <trap>
                              more_env: []
                              words: [{<trap>} {<0>} {<1>} {<2>} {<3>} {<15>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <-P>
                          pattern: (pat.Words words:[{<-P>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'ppfile='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'ppfile='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ppfile='> name:ppfile)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'doti='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'doti='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'doti='> name:doti)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <trap>
                              more_env: []
                              words: [{<trap>} {<0>} {<1>} {<2>} {<3>} {<15>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_LBracket '['>
                          pattern: 
                            (pat.Words
                              words: [
                                {<Id.Lit_LBracket '['> <-> <Id.Lit_Other '+'> <Id.Lit_RBracket ']'> 
                                  <Id.Lit_Star '*'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.VSub_DollarName '$src1'>
                          pattern: 
                            (pat.Words
                              words: [
                                {($ Id.VSub_DollarName src1)}
                                {($ Id.VSub_DollarName src2)}
                                {($ Id.VSub_DollarName src3)}
                                {($ Id.VSub_DollarName src4)}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'nfile='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'nfile='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nfile='> name:nfile)
                                  op: assign_op.Equal
                                  rhs: {<Id.Lit_Underscore _> ($ Id.VSub_DollarName nfile)}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <eval>
                              more_env: []
                              words: [
                                {<eval>}
                                {<input> ($ Id.VSub_DollarName nfile) <Id.Lit_Equals '='> (SQ <'$arg'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName ppstdout)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Left_DoubleQuote '"'>
                                  pattern: (pat.Words words:[{(DQ )}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.Case
                                      case_kw: <Id.KW_Case case>
                                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName doti)})
                                      arms_start: <Id.KW_In in>
                                      arms: [
                                        (CaseArm
                                          left: <Id.Left_DoubleQuote '"'>
                                          pattern: (pat.Words words:[{(DQ )}])
                                          middle: <Id.Right_CasePat _>
                                          action: [
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'file='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'file='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'file='>
                                                      name: file
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (CommandSub
                                                        left_token: <Id.Left_Backtick '`'>
                                                        child: 
                                                          (command.Pipeline
                                                            children: [
                                                              (command.Simple
                                                                blame_tok: <echo>
                                                                more_env: []
                                                                words: [
                                                                  {<echo>}
                                                                  {($ Id.VSub_DollarName arg)}
                                                                ]
                                                                redirects: []
                                                                do_fork: T
                                                              )
                                                              (command.Simple
                                                                blame_tok: <sed>
                                                                more_env: []
                                                                words: [
                                                                  {<sed>}
                                                                  {<-e>}
                                                                  {(DQ <'s,.*/,,'>)}
                                                                  {<-e>}
                                                                  {
                                                                    (DQ <'s,^,'> 
                                                                      ($ Id.VSub_DollarName tmp) <'/,'>
                                                                    )
                                                                  }
                                                                ]
                                                                redirects: []
                                                                do_fork: T
                                                              )
                                                            ]
                                                            ops: [<Id.Op_Pipe _>]
                                                          )
                                                        right: <Id.Backtick_Right '`'>
                                                      )
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                            (command.Case
                                              case_kw: <Id.KW_Case case>
                                              to_match: 
                                                (case_arg.Word
                                                  w: {($ Id.VSub_DollarName clobber)}
                                                )
                                              arms_start: <Id.KW_In in>
                                              arms: [
                                                (CaseArm
                                                  left: <Id.Left_DoubleQuote '"'>
                                                  pattern: (pat.Words words:[{(DQ )}])
                                                  middle: <Id.Right_CasePat _>
                                                  action: [
                                                    (command.ShAssignment
                                                      left: <Id.Lit_VarLike 'clobber='>
                                                      pairs: [
                                                        (AssignPair
                                                          left: <Id.Lit_VarLike 'clobber='>
                                                          lhs: 
                                                            (sh_lhs_expr.Name
                                                              left: <Id.Lit_VarLike 'clobber='>
                                                              name: clobber
                                                            )
                                                          op: assign_op.Equal
                                                          rhs: {($ Id.VSub_DollarName tmp)}
                                                        )
                                                      ]
                                                      redirects: []
                                                    )
                                                    (command.Case
                                                      case_kw: <Id.KW_Case case>
                                                      to_match: 
                                                        (case_arg.Word
                                                          w: {($ Id.VSub_DollarName verbose)}
                                                        )
                                                      arms_start: <Id.KW_In in>
                                                      arms: [
                                                        (CaseArm
                                                          left: <1>
                                                          pattern: (pat.Words words:[{<1>}])
                                                          middle: <Id.Right_CasePat _>
                                                          action: [
                                                            (command.Simple
                                                              blame_tok: <print>
                                                              more_env: []
                                                              words: [
                                                                {<print>}
                                                                {<-r>}
                                                                {<-->}
                                                                {<Id.Lit_Other '+'>}
                                                                {<mkdir>}
                                                                {($ Id.VSub_DollarName tmp)}
                                                              ]
                                                              redirects: []
                                                              do_fork: T
                                                            )
                                                          ]
                                                          right: <Id.Op_DSemi _>
                                                        )
                                                      ]
                                                      arms_end: <Id.KW_Esac esac>
                                                      redirects: []
                                                    )
                                                    (command.Case
                                                      case_kw: <Id.KW_Case case>
                                                      to_match: 
                                                        (case_arg.Word
                                                          w: {($ Id.VSub_DollarName exec)}
                                                        )
                                                      arms_start: <Id.KW_In in>
                                                      arms: [
                                                        (CaseArm
                                                          left: <1>
                                                          pattern: (pat.Words words:[{<1>}])
                                                          middle: <Id.Right_CasePat _>
                                                          action: [
                                                            (command.AndOr
                                                              children: [
                                                                (command.Simple
                                                                  blame_tok: <mkdir>
                                                                  more_env: []
                                                                  words: [
                                                                    {<mkdir>}
                                                                    {($ Id.VSub_DollarName tmp)}
                                                                  ]
                                                                  redirects: []
                                                                  do_fork: T
                                                                )
                                                                (command.ControlFlow
                                                                  keyword: <Id.ControlFlow_Exit exit>
                                                                )
                                                              ]
                                                              ops: [<Id.Op_DPipe _>]
                                                            )
                                                          ]
                                                          right: <Id.Op_DSemi _>
                                                        )
                                                      ]
                                                      arms_end: <Id.KW_Esac esac>
                                                      redirects: []
                                                    )
                                                  ]
                                                  right: <Id.Op_DSemi _>
                                                )
                                              ]
                                              arms_end: <Id.KW_Esac esac>
                                              redirects: []
                                            )
                                          ]
                                          right: <Id.Op_DSemi _>
                                        )
                                        (CaseArm
                                          left: <Id.Lit_Star '*'>
                                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                                          middle: <Id.Right_CasePat _>
                                          action: [
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'file='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'file='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'file='>
                                                      name: file
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (CommandSub
                                                        left_token: <Id.Left_Backtick '`'>
                                                        child: 
                                                          (command.Pipeline
                                                            children: [
                                                              (command.Simple
                                                                blame_tok: <echo>
                                                                more_env: []
                                                                words: [
                                                                  {<echo>}
                                                                  {($ Id.VSub_DollarName arg)}
                                                                ]
                                                                redirects: []
                                                                do_fork: T
                                                              )
                                                              (command.Simple
                                                                blame_tok: <sed>
                                                                more_env: []
                                                                words: [
                                                                  {<sed>}
                                                                  {<-e>}
                                                                  {(DQ <'s,.*/,,'>)}
                                                                  {<-e>}
                                                                  {(DQ <'s,[.][^.]*,.i,'>)}
                                                                ]
                                                                redirects: []
                                                                do_fork: T
                                                              )
                                                            ]
                                                            ops: [<Id.Op_Pipe _>]
                                                          )
                                                        right: <Id.Backtick_Right '`'>
                                                      )
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'clobber='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'clobber='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'clobber='>
                                                      name: clobber
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (DQ ($ Id.VSub_DollarName clobber) <' '> 
                                                        ($ Id.VSub_DollarName file)
                                                      )
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                          ]
                                          right: <Id.Op_DSemi _>
                                        )
                                      ]
                                      arms_end: <Id.KW_Esac esac>
                                      redirects: []
                                    )
                                    (command.Simple
                                      blame_tok: <eval>
                                      more_env: []
                                      words: [
                                        {<eval>}
                                        {<output> ($ Id.VSub_DollarName nfile) <Id.Lit_Equals '='> 
                                          (SQ <'$file'>)
                                        }
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {(SQ )} {(DQ ($ Id.VSub_At '@'))} {(DQ ($ Id.VSub_DollarName arg))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Subshell
                  left: <Id.Op_LParen _>
                  child: 
                    (command.CommandList
                      children: [
                        (command.Simple
                          blame_tok: <set>
                          more_env: []
                          words: [
                            {<set>}
                            {(SQ )}
                            {(DQ ($ Id.VSub_At '@'))}
                            {(SQ )}
                            {(DQ ($ Id.VSub_Number 1))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.WhileUntil
                          keyword: <Id.KW_While while>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <Id.Lit_Colon ':'>
                                  more_env: []
                                  words: [{<Id.Lit_Colon ':'>}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          body: 
                            (command.DoGroup
                              left: <Id.KW_Do do>
                              children: [
                                (command.Simple
                                  blame_tok: <shift>
                                  more_env: []
                                  words: [{<shift>}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <shift>
                                  more_env: []
                                  words: [{<shift>}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Case
                                  case_kw: <Id.KW_Case case>
                                  to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                                  arms_start: <Id.KW_In in>
                                  arms: [
                                    (CaseArm
                                      left: <Id.Lit_LBracket '['>
                                      pattern: 
                                        (pat.Words
                                          words: [
                                            {<Id.Lit_LBracket '['> <-> <Id.Lit_Other '+'> 
                                              <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>
                                            }
                                          ]
                                        )
                                      middle: <Id.Right_CasePat _>
                                      action: []
                                      right: <Id.Op_DSemi _>
                                    )
                                    (CaseArm
                                      left: <Id.Lit_Star '*'>
                                      pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                                      middle: <Id.Right_CasePat _>
                                      action: [
                                        (command.Simple
                                          blame_tok: <shift>
                                          more_env: []
                                          words: [{<shift>}]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.ControlFlow
                                          keyword: <Id.ControlFlow_Break break>
                                        )
                                      ]
                                      right: <Id.Op_DSemi _>
                                    )
                                  ]
                                  arms_end: <Id.KW_Esac esac>
                                  redirects: []
                                )
                                (command.Simple
                                  blame_tok: <set>
                                  more_env: []
                                  words: [
                                    {<set>}
                                    {(SQ )}
                                    {(DQ ($ Id.VSub_At '@'))}
                                    {(DQ ($ Id.VSub_Number 1))}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              right: <Id.KW_Done done>
                            )
                          redirects: []
                        )
                        (command.Case
                          case_kw: <Id.KW_Case case>
                          to_match: 
                            (case_arg.Word
                              w: {($ Id.VSub_DollarName doti) ($ Id.VSub_DollarName ppstdout)}
                            )
                          arms_start: <Id.KW_In in>
                          arms: [
                            (CaseArm
                              left: <Id.Left_DoubleQuote '"'>
                              pattern: (pat.Words words:[{(DQ )}])
                              middle: <Id.Right_CasePat _>
                              action: [
                                (command.Simple
                                  blame_tok: <set>
                                  more_env: []
                                  words: [{<set>} {(SQ )} {(DQ ($ Id.VSub_At '@'))} {<-D-L>}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <shift>
                                  more_env: []
                                  words: [{<shift>}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              right: <Id.Op_DSemi _>
                            )
                          ]
                          arms_end: <Id.KW_Esac esac>
                          redirects: []
                        )
                        (command.Simple
                          blame_tok: <shift>
                          more_env: []
                          words: [{<shift>}]
                          redirects: []
                          do_fork: T
                        )
                        (command.WhileUntil
                          keyword: <Id.KW_While while>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <Id.Lit_Colon ':'>
                                  more_env: []
                                  words: [{<Id.Lit_Colon ':'>}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          body: 
                            (command.DoGroup
                              left: <Id.KW_Do do>
                              children: [
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'arg='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'arg='>
                                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
                                      op: assign_op.Equal
                                      rhs: {($ Id.VSub_Number 1)}
                                    )
                                  ]
                                  redirects: []
                                )
                                (command.Simple
                                  blame_tok: <shift>
                                  more_env: []
                                  words: [{<shift>}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Case
                                  case_kw: <Id.KW_Case case>
                                  to_match: (case_arg.Word w:{($ Id.VSub_DollarName arg)})
                                  arms_start: <Id.KW_In in>
                                  arms: [
                                    (CaseArm
                                      left: <Id.Left_SingleQuote '\''>
                                      pattern: (pat.Words words:[{(SQ )}])
                                      middle: <Id.Right_CasePat _>
                                      action: [
                                        (command.ControlFlow
                                          keyword: <Id.ControlFlow_Break break>
                                        )
                                      ]
                                      right: <Id.Op_DSemi _>
                                    )
                                    (CaseArm
                                      left: <->
                                      pattern: 
                                        (pat.Words
                                          words: [
                                            {<-> <Id.Lit_LBracket '['> ($ Id.VSub_DollarName multiopt) 
                                              <Id.Lit_RBracket ']'>
                                            }
                                          ]
                                        )
                                      middle: <Id.Right_CasePat _>
                                      action: [
                                        (command.Case
                                          case_kw: <Id.KW_Case case>
                                          to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                                          arms_start: <Id.KW_In in>
                                          arms: [
                                            (CaseArm
                                              left: <Id.Lit_QMark '?'>
                                              pattern: 
                                                (pat.Words
                                                  words: [{<Id.Lit_QMark '?'> <Id.Lit_Star '*'>}]
                                                )
                                              middle: <Id.Right_CasePat _>
                                              action: [
                                                (command.Simple
                                                  blame_tok: <shift>
                                                  more_env: []
                                                  words: [{<shift>}]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              ]
                                              right: <Id.Op_DSemi _>
                                            )
                                          ]
                                          arms_end: <Id.KW_Esac esac>
                                          redirects: []
                                        )
                                        (command.ControlFlow
                                          keyword: <Id.ControlFlow_Continue continue>
                                        )
                                      ]
                                      right: <Id.Op_DSemi _>
                                    )
                                    (CaseArm
                                      left: <->
                                      pattern: 
                                        (pat.Words
                                          words: [
                                            {<-> <Id.Lit_LBracket '['> <DIU> <Id.Lit_RBracket ']'> 
                                              <Id.Lit_Star '*'>
                                            }
                                            {<-> <Id.Lit_LBracket '['> 
                                              <abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ> <Id.Lit_RBracket ']'> <Id.Lit_LBracket '['> 
                                              <
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
                                              > <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>
                                            }
                                          ]
                                        )
                                      middle: <Id.Right_CasePat _>
                                      action: []
                                      right: <Id.Op_DSemi _>
                                    )
                                    (CaseArm
                                      left: <-G>
                                      pattern: (pat.Words words:[{<-G>}])
                                      middle: <Id.Right_CasePat _>
                                      action: [
                                        (command.Case
                                          case_kw: <Id.KW_Case case>
                                          to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                                          arms_start: <Id.KW_In in>
                                          arms: [
                                            (CaseArm
                                              left: <Id.Lit_LBracket '['>
                                              pattern: 
                                                (pat.Words
                                                  words: [
                                                    {<Id.Lit_LBracket '['> <0-9> <Id.Lit_RBracket ']'> 
                                                      <Id.Lit_Star '*'>
                                                    }
                                                  ]
                                                )
                                              middle: <Id.Right_CasePat _>
                                              action: [
                                                (command.Simple
                                                  blame_tok: <shift>
                                                  more_env: []
                                                  words: [{<shift>}]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              ]
                                              right: <Id.Op_DSemi _>
                                            )
                                          ]
                                          arms_end: <Id.KW_Esac esac>
                                          redirects: []
                                        )
                                      ]
                                      right: <Id.Op_DSemi _>
                                    )
                                    (CaseArm
                                      left: <Id.Lit_LBracket '['>
                                      pattern: 
                                        (pat.Words
                                          words: [
                                            {<Id.Lit_LBracket '['> <-> <Id.Lit_Other '+'> 
                                              <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>
                                            }
                                          ]
                                        )
                                      middle: <Id.Right_CasePat _>
                                      action: [
                                        (command.ControlFlow
                                          keyword: <Id.ControlFlow_Continue continue>
                                        )
                                      ]
                                      right: <Id.Op_DSemi _>
                                    )
                                    (CaseArm
                                      left: <Id.VSub_DollarName '$src1'>
                                      pattern: 
                                        (pat.Words
                                          words: [
                                            {($ Id.VSub_DollarName src1)}
                                            {($ Id.VSub_DollarName src2)}
                                            {($ Id.VSub_DollarName src3)}
                                            {($ Id.VSub_DollarName src4)}
                                          ]
                                        )
                                      middle: <Id.Right_CasePat _>
                                      action: [
                                        (command.ControlFlow
                                          keyword: <Id.ControlFlow_Break break>
                                        )
                                      ]
                                      right: <Id.Op_DSemi _>
                                    )
                                  ]
                                  arms_end: <Id.KW_Esac esac>
                                  redirects: []
                                )
                                (command.Simple
                                  blame_tok: <set>
                                  more_env: []
                                  words: [
                                    {<set>}
                                    {(SQ )}
                                    {(DQ ($ Id.VSub_At '@'))}
                                    {(DQ ($ Id.VSub_DollarName arg))}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <shift>
                                  more_env: []
                                  words: [{<shift>}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              right: <Id.KW_Done done>
                            )
                          redirects: []
                        )
                        (command.Case
                          case_kw: <Id.KW_Case case>
                          to_match: (case_arg.Word w:{($ Id.VSub_DollarName nfile)})
                          arms_start: <Id.KW_In in>
                          arms: [
                            (CaseArm
                              left: <Id.Lit_QMark '?'>
                              pattern: (pat.Words words:[{<Id.Lit_QMark '?'> <Id.Lit_Star '*'>}])
                              middle: <Id.Right_CasePat _>
                              action: [
                                (command.WhileUntil
                                  keyword: <Id.KW_While while>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Simple
                                          blame_tok: <Id.Lit_Colon ':'>
                                          more_env: []
                                          words: [{<Id.Lit_Colon ':'>}]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                    )
                                  body: 
                                    (command.DoGroup
                                      left: <Id.KW_Do do>
                                      children: [
                                        (command.ShAssignment
                                          left: <Id.Lit_VarLike 'arg='>
                                          pairs: [
                                            (AssignPair
                                              left: <Id.Lit_VarLike 'arg='>
                                              lhs: 
                                                (sh_lhs_expr.Name
                                                  left: <Id.Lit_VarLike 'arg='>
                                                  name: arg
                                                )
                                              op: assign_op.Equal
                                              rhs: {($ Id.VSub_Number 1)}
                                            )
                                          ]
                                          redirects: []
                                        )
                                        (command.Simple
                                          blame_tok: <shift>
                                          more_env: []
                                          words: [{<shift>}]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.Case
                                          case_kw: <Id.KW_Case case>
                                          to_match: (case_arg.Word w:{($ Id.VSub_DollarName arg)})
                                          arms_start: <Id.KW_In in>
                                          arms: [
                                            (CaseArm
                                              left: <Id.Left_SingleQuote '\''>
                                              pattern: (pat.Words words:[{(SQ )}])
                                              middle: <Id.Right_CasePat _>
                                              action: [
                                                (command.ControlFlow
                                                  keyword: <Id.ControlFlow_Break break>
                                                )
                                              ]
                                              right: <Id.Op_DSemi _>
                                            )
                                          ]
                                          arms_end: <Id.KW_Esac esac>
                                          redirects: []
                                        )
                                      ]
                                      right: <Id.KW_Done done>
                                    )
                                  redirects: []
                                )
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'n='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'n='>
                                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'n='> name:n)
                                      op: assign_op.Equal
                                      rhs: (rhs_word__Empty)
                                    )
                                  ]
                                  redirects: []
                                )
                                (command.WhileUntil
                                  keyword: <Id.KW_While while>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Simple
                                          blame_tok: <Id.Lit_Colon ':'>
                                          more_env: []
                                          words: [{<Id.Lit_Colon ':'>}]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                    )
                                  body: 
                                    (command.DoGroup
                                      left: <Id.KW_Do do>
                                      children: [
                                        (command.Case
                                          case_kw: <Id.KW_Case case>
                                          to_match: (case_arg.Word w:{($ Id.VSub_DollarName n)})
                                          arms_start: <Id.KW_In in>
                                          arms: [
                                            (CaseArm
                                              left: <Id.VSub_DollarName '$nfile'>
                                              pattern: 
                                                (pat.Words
                                                  words: [{($ Id.VSub_DollarName nfile)}]
                                                )
                                              middle: <Id.Right_CasePat _>
                                              action: [
                                                (command.ControlFlow
                                                  keyword: <Id.ControlFlow_Break break>
                                                )
                                              ]
                                              right: <Id.Op_DSemi _>
                                            )
                                          ]
                                          arms_end: <Id.KW_Esac esac>
                                          redirects: []
                                        )
                                        (command.ShAssignment
                                          left: <Id.Lit_VarLike 'n='>
                                          pairs: [
                                            (AssignPair
                                              left: <Id.Lit_VarLike 'n='>
                                              lhs: 
                                                (sh_lhs_expr.Name
                                                  left: <Id.Lit_VarLike 'n='>
                                                  name: n
                                                )
                                              op: assign_op.Equal
                                              rhs: {<Id.Lit_Underscore _> ($ Id.VSub_DollarName n)}
                                            )
                                          ]
                                          redirects: []
                                        )
                                        (command.Simple
                                          blame_tok: <eval>
                                          more_env: []
                                          words: [
                                            {<eval>}
                                            {<Id.Lit_VarLike 'input='> (SQ <'$input'>) 
                                              ($ Id.VSub_DollarName n)
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.Case
                                          case_kw: <Id.KW_Case case>
                                          to_match: (case_arg.Word w:{($ Id.VSub_DollarName ppstdout)})
                                          arms_start: <Id.KW_In in>
                                          arms: [
                                            (CaseArm
                                              left: <Id.Left_DoubleQuote '"'>
                                              pattern: (pat.Words words:[{(DQ )}])
                                              middle: <Id.Right_CasePat _>
                                              action: [
                                                (command.Simple
                                                  blame_tok: <eval>
                                                  more_env: []
                                                  words: [
                                                    {<eval>}
                                                    {<Id.Lit_VarLike 'output='> (SQ <'$output'>) 
                                                      ($ Id.VSub_DollarName n)
                                                    }
                                                  ]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                                (command.Case
                                                  case_kw: <Id.KW_Case case>
                                                  to_match: 
                                                    (case_arg.Word
                                                      w: {($ Id.VSub_DollarName verbose)}
                                                    )
                                                  arms_start: <Id.KW_In in>
                                                  arms: [
                                                    (CaseArm
                                                      left: <1>
                                                      pattern: (pat.Words words:[{<1>}])
                                                      middle: <Id.Right_CasePat _>
                                                      action: [
                                                        (command.Simple
                                                          blame_tok: <echo>
                                                          more_env: []
                                                          words: [
                                                            {<echo>}
                                                            {<Id.Lit_Other '+'>}
                                                            {(DQ ($ Id.VSub_At '@'))}
                                                            {(DQ ($ Id.VSub_DollarName input))}
                                                            {(DQ ($ Id.VSub_DollarName output))}
                                                          ]
                                                          redirects: []
                                                          do_fork: T
                                                        )
                                                      ]
                                                      right: <Id.Op_DSemi _>
                                                    )
                                                  ]
                                                  arms_end: <Id.KW_Esac esac>
                                                  redirects: []
                                                )
                                                (command.Case
                                                  case_kw: <Id.KW_Case case>
                                                  to_match: 
                                                    (case_arg.Word
                                                      w: {($ Id.VSub_DollarName exec)}
                                                    )
                                                  arms_start: <Id.KW_In in>
                                                  arms: [
                                                    (CaseArm
                                                      left: <1>
                                                      pattern: (pat.Words words:[{<1>}])
                                                      middle: <Id.Right_CasePat _>
                                                      action: [
                                                        (command.AndOr
                                                          children: [
                                                            (command.Simple
                                                              blame_tok: <Id.Left_DoubleQuote '"'>
                                                              more_env: []
                                                              words: [
                                                                {(DQ ($ Id.VSub_At '@'))}
                                                                {(DQ ($ Id.VSub_DollarName input))}
                                                                {(DQ ($ Id.VSub_DollarName output))}
                                                              ]
                                                              redirects: []
                                                              do_fork: T
                                                            )
                                                            (command.ControlFlow
                                                              keyword: <Id.ControlFlow_Exit exit>
                                                            )
                                                          ]
                                                          ops: [<Id.Op_DPipe _>]
                                                        )
                                                      ]
                                                      right: <Id.Op_DSemi _>
                                                    )
                                                  ]
                                                  arms_end: <Id.KW_Esac esac>
                                                  redirects: []
                                                )
                                              ]
                                              right: <Id.Op_DSemi _>
                                            )
                                            (CaseArm
                                              left: <Id.Lit_Star '*'>
                                              pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                                              middle: <Id.Right_CasePat _>
                                              action: [
                                                (command.Case
                                                  case_kw: <Id.KW_Case case>
                                                  to_match: 
                                                    (case_arg.Word
                                                      w: {($ Id.VSub_DollarName verbose)}
                                                    )
                                                  arms_start: <Id.KW_In in>
                                                  arms: [
                                                    (CaseArm
                                                      left: <1>
                                                      pattern: (pat.Words words:[{<1>}])
                                                      middle: <Id.Right_CasePat _>
                                                      action: [
                                                        (command.Simple
                                                          blame_tok: <echo>
                                                          more_env: []
                                                          words: [
                                                            {<echo>}
                                                            {<Id.Lit_Other '+'>}
                                                            {(DQ ($ Id.VSub_At '@'))}
                                                            {(DQ ($ Id.VSub_DollarName input))}
                                                          ]
                                                          redirects: []
                                                          do_fork: T
                                                        )
                                                      ]
                                                      right: <Id.Op_DSemi _>
                                                    )
                                                  ]
                                                  arms_end: <Id.KW_Esac esac>
                                                  redirects: []
                                                )
                                                (command.Case
                                                  case_kw: <Id.KW_Case case>
                                                  to_match: 
                                                    (case_arg.Word
                                                      w: {($ Id.VSub_DollarName exec)}
                                                    )
                                                  arms_start: <Id.KW_In in>
                                                  arms: [
                                                    (CaseArm
                                                      left: <1>
                                                      pattern: (pat.Words words:[{<1>}])
                                                      middle: <Id.Right_CasePat _>
                                                      action: [
                                                        (command.AndOr
                                                          children: [
                                                            (command.Simple
                                                              blame_tok: <Id.Left_DoubleQuote '"'>
                                                              more_env: []
                                                              words: [
                                                                {(DQ ($ Id.VSub_At '@'))}
                                                                {(DQ ($ Id.VSub_DollarName input))}
                                                              ]
                                                              redirects: []
                                                              do_fork: T
                                                            )
                                                            (command.ControlFlow
                                                              keyword: <Id.ControlFlow_Exit exit>
                                                            )
                                                          ]
                                                          ops: [<Id.Op_DPipe _>]
                                                        )
                                                      ]
                                                      right: <Id.Op_DSemi _>
                                                    )
                                                  ]
                                                  arms_end: <Id.KW_Esac esac>
                                                  redirects: []
                                                )
                                              ]
                                              right: <Id.Op_DSemi _>
                                            )
                                          ]
                                          arms_end: <Id.KW_Esac esac>
                                          redirects: []
                                        )
                                      ]
                                      right: <Id.KW_Done done>
                                    )
                                  redirects: []
                                )
                              ]
                              right: <Id.Op_DSemi _>
                            )
                          ]
                          arms_end: <Id.KW_Esac esac>
                          redirects: []
                        )
                      ]
                    )
                  right: <Id.Right_Subshell _>
                  redirects: []
                )
                (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>)
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: 
                (case_arg.Word
                  w: {($ Id.VSub_DollarName ppfile) ($ Id.VSub_DollarName ppstdout)}
                )
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Lit_QMark '?'>
                  pattern: (pat.Words words:[{<Id.Lit_QMark '?'> <Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Exit exit>)]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Simple
                      blame_tok: <Id.Lit_Colon ':'>
                      more_env: []
                      words: [{<Id.Lit_Colon ':'>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Lit_LBracket '['>
                          pattern: 
                            (pat.Words
                              words: [
                                {<Id.Lit_LBracket '['> <-> <Id.Lit_Other '+'> <Id.Lit_RBracket ']'> 
                                  <Id.Lit_Star '*'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {(SQ )} {(DQ ($ Id.VSub_At '@'))} {(SQ )} {(DQ ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <shift>
              more_env: []
              words: [{<shift>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <shift>
              more_env: []
              words: [{<shift>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'n='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'n='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'n='> name:n)
                  op: assign_op.Equal
                  rhs: (rhs_word__Empty)
                )
              ]
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Simple
                      blame_tok: <Id.Lit_Colon ':'>
                      more_env: []
                      words: [{<Id.Lit_Colon ':'>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'arg='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'arg='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number 1)}
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName arg)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Left_SingleQuote '\''>
                          pattern: (pat.Words words:[{(SQ )}])
                          middle: <Id.Right_CasePat _>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <->
                          pattern: 
                            (pat.Words
                              words: [
                                {<-> <Id.Lit_LBracket '['> ($ Id.VSub_DollarName multiopt) 
                                  <Id.Lit_RBracket ']'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Lit_QMark '?'>
                                  pattern: (pat.Words words:[{<Id.Lit_QMark '?'> <Id.Lit_Star '*'>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.Simple
                                      blame_tok: <set>
                                      more_env: []
                                      words: [
                                        {<set>}
                                        {(SQ )}
                                        {(DQ ($ Id.VSub_At '@'))}
                                        {(DQ ($ Id.VSub_DollarName arg))}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <shift>
                                      more_env: []
                                      words: [{<shift>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'arg='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'arg='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'arg='>
                                              name: arg
                                            )
                                          op: assign_op.Equal
                                          rhs: {($ Id.VSub_Number 1)}
                                        )
                                      ]
                                      redirects: []
                                    )
                                    (command.Simple
                                      blame_tok: <shift>
                                      more_env: []
                                      words: [{<shift>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <->
                          pattern: 
                            (pat.Words
                              words: [
                                {<-> <Id.Lit_LBracket '['> <DIU> <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName ppld)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Left_DoubleQuote '"'>
                                  pattern: (pat.Words words:[{(DQ )}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Continue continue>
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_LBracket '['>
                          pattern: 
                            (pat.Words
                              words: [
                                {<Id.Lit_LBracket '['> <-> <Id.Lit_Other '+'> <Id.Lit_RBracket ']'> 
                                  <Id.Lit_Star '*'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.VSub_DollarName '$src1'>
                          pattern: 
                            (pat.Words
                              words: [
                                {($ Id.VSub_DollarName src1)}
                                {($ Id.VSub_DollarName src2)}
                                {($ Id.VSub_DollarName src3)}
                                {($ Id.VSub_DollarName src4)}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'n='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'n='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'n='> name:n)
                                  op: assign_op.Equal
                                  rhs: {<Id.Lit_Underscore _> ($ Id.VSub_DollarName n)}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <eval>
                              more_env: []
                              words: [
                                {<eval>}
                                {<Id.Lit_VarLike 'arg='> (SQ <'$output'>) ($ Id.VSub_DollarName n)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {(SQ )} {(DQ ($ Id.VSub_At '@'))} {(DQ ($ Id.VSub_DollarName arg))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_DollarName verbose)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <1>
                  pattern: (pat.Words words:[{<1>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {<Id.Lit_Other '+'>} {(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_DollarName exec)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <1>
                  pattern: (pat.Words words:[{<1>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <Id.Left_DoubleQuote '"'>
                      more_env: []
                      words: [{(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          right: <Id.Op_DSemi _>
        )
        (CaseArm
          left: <Id.Lit_Star '*'>
          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
          middle: <Id.Right_CasePat _>
          action: [
            (command.Simple
              blame_tok: <integer>
              more_env: []
              words: [
                {<integer>}
                {<Id.Lit_VarLike 'npp='> <1>}
                {<Id.Lit_VarLike 'ncc='> <1>}
                {<Id.Lit_VarLike 'nav='> <1>}
                {<Id.Lit_VarLike 'xav='> ($ Id.VSub_Pound '#')}
                {<oav>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {<-A>} {<av>} {(DQ ($ Id.VSub_At '@'))}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_ArrayLhsOpen 'pp['>
              pairs: [
                (AssignPair
                  left: <Id.Lit_ArrayLhsOpen 'pp['>
                  lhs: 
                    (sh_lhs_expr.IndexedName
                      left: <Id.Lit_ArrayLhsOpen 'pp['>
                      name: pp
                      index: {<Id.Lit_Digits 0>}
                    )
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name av>
                        var_name: av
                        bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.DParen
                      left: <Id.Op_DLeftParen _>
                      child: 
                        (arith_expr.Binary
                          op_id: Id.Arith_Less
                          left: ($ Id.Lit_ArithVarLike nav)
                          right: ($ Id.Lit_ArithVarLike xav)
                        )
                      right: <Id.Op_DRightParen _>
                      redirects: []
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'arg='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'arg='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name av>
                                var_name: av
                                bracket_op: (bracket_op.ArrayIndex expr:($ Id.Lit_ArithVarLike nav))
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.DParen
                      left: <Id.Op_DLeftParen _>
                      child: 
                        (arith_expr.BinaryAssign
                          op_id: Id.Arith_Equal
                          left: ($ Id.Lit_ArithVarLike nav)
                          right: 
                            (arith_expr.Binary
                              op_id: Id.Arith_Plus
                              left: ($ Id.Lit_ArithVarLike nav)
                              right: {<Id.Lit_Digits 1>}
                            )
                        )
                      right: <Id.Op_DRightParen _>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName arg)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Lit_LBracket '['>
                          pattern: 
                            (pat.Words
                              words: [
                                {<Id.Lit_LBracket '['> <-> <Id.Lit_Other '+'> <Id.Lit_RBracket ']'> 
                                  <Id.Lit_Star '*'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_ArrayLhsOpen 'pp['>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_ArrayLhsOpen 'pp['>
                          lhs: 
                            (sh_lhs_expr.IndexedName
                              left: <Id.Lit_ArrayLhsOpen 'pp['>
                              name: pp
                              index: ($ Id.Lit_ArithVarLike npp)
                            )
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName arg)}
                        )
                      ]
                      redirects: []
                    )
                    (command.DParen
                      left: <Id.Op_DLeftParen _>
                      child: 
                        (arith_expr.BinaryAssign
                          op_id: Id.Arith_Equal
                          left: ($ Id.Lit_ArithVarLike npp)
                          right: 
                            (arith_expr.Binary
                              op_id: Id.Arith_Plus
                              left: ($ Id.Lit_ArithVarLike npp)
                              right: {<Id.Lit_Digits 1>}
                            )
                        )
                      right: <Id.Op_DRightParen _>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_DollarName doti)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Left_DoubleQuote '"'>
                  pattern: (pat.Words words:[{(DQ )}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_ArrayLhsOpen 'pp['>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_ArrayLhsOpen 'pp['>
                          lhs: 
                            (sh_lhs_expr.IndexedName
                              left: <Id.Lit_ArrayLhsOpen 'pp['>
                              name: pp
                              index: ($ Id.Lit_ArithVarLike npp)
                            )
                          op: assign_op.Equal
                          rhs: {<-D-L>}
                        )
                      ]
                      redirects: []
                    )
                    (command.DParen
                      left: <Id.Op_DLeftParen _>
                      child: 
                        (arith_expr.BinaryAssign
                          op_id: Id.Arith_Equal
                          left: ($ Id.Lit_ArithVarLike npp)
                          right: 
                            (arith_expr.Binary
                              op_id: Id.Arith_Plus
                              left: ($ Id.Lit_ArithVarLike npp)
                              right: {<Id.Lit_Digits 1>}
                            )
                        )
                      right: <Id.Op_DRightParen _>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_ArrayLhsOpen 'cc['>
              pairs: [
                (AssignPair
                  left: <Id.Lit_ArrayLhsOpen 'cc['>
                  lhs: 
                    (sh_lhs_expr.IndexedName
                      left: <Id.Lit_ArrayLhsOpen 'cc['>
                      name: cc
                      index: {<Id.Lit_Digits 0>}
                    )
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName arg)}
                )
              ]
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.DParen
                      left: <Id.Op_DLeftParen _>
                      child: 
                        (arith_expr.Binary
                          op_id: Id.Arith_Less
                          left: ($ Id.Lit_ArithVarLike nav)
                          right: ($ Id.Lit_ArithVarLike xav)
                        )
                      right: <Id.Op_DRightParen _>
                      redirects: []
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'arg='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'arg='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name av>
                                var_name: av
                                bracket_op: (bracket_op.ArrayIndex expr:($ Id.Lit_ArithVarLike nav))
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.DParen
                      left: <Id.Op_DLeftParen _>
                      child: 
                        (arith_expr.BinaryAssign
                          op_id: Id.Arith_Equal
                          left: ($ Id.Lit_ArithVarLike nav)
                          right: 
                            (arith_expr.Binary
                              op_id: Id.Arith_Plus
                              left: ($ Id.Lit_ArithVarLike nav)
                              right: {<Id.Lit_Digits 1>}
                            )
                        )
                      right: <Id.Op_DRightParen _>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName arg)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <->
                          pattern: 
                            (pat.Words
                              words: [
                                {<-> <Id.Lit_LBracket '['> ($ Id.VSub_DollarName multiopt) 
                                  <Id.Lit_RBracket ']'>
                                }
                                {<-> <Id.Lit_LBracket '['> <Qq> <Id.Lit_RBracket ']'> <dir>}
                                {<-> <Id.Lit_LBracket '['> <Qq> <Id.Lit_RBracket ']'> <option>}
                                {<-> <Id.Lit_LBracket '['> <Qq> <Id.Lit_RBracket ']'> <path>}
                                {<-> <Id.Lit_LBracket '['> <Qq> <Id.Lit_RBracket ']'> <produce>}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName arg)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <->
                                  pattern: 
                                    (pat.Words
                                      words: [
                                        {<-> <Id.Lit_LBracket '['> <Qq> <Id.Lit_RBracket ']'> <option>}
                                      ]
                                    )
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.DParen
                                      left: <Id.Op_DLeftParen _>
                                      child: 
                                        (arith_expr.BinaryAssign
                                          op_id: Id.Arith_Equal
                                          left: ($ Id.Lit_ArithVarLike oav)
                                          right: 
                                            (arith_expr.Binary
                                              op_id: Id.Arith_Plus
                                              left: ($ Id.Lit_ArithVarLike nav)
                                              right: {<Id.Lit_Digits 2>}
                                            )
                                        )
                                      right: <Id.Op_DRightParen _>
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                                (CaseArm
                                  left: <Id.Lit_Star '*'>
                                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.DParen
                                      left: <Id.Op_DLeftParen _>
                                      child: 
                                        (arith_expr.BinaryAssign
                                          op_id: Id.Arith_Equal
                                          left: ($ Id.Lit_ArithVarLike oav)
                                          right: 
                                            (arith_expr.Binary
                                              op_id: Id.Arith_Plus
                                              left: ($ Id.Lit_ArithVarLike nav)
                                              right: {<Id.Lit_Digits 1>}
                                            )
                                        )
                                      right: <Id.Op_DRightParen _>
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.DParen
                                          left: <Id.Op_DLeftParen _>
                                          child: 
                                            (arith_expr.Binary
                                              op_id: Id.Arith_Great
                                              left: ($ Id.Lit_ArithVarLike oav)
                                              right: ($ Id.Lit_ArithVarLike xav)
                                            )
                                          right: <Id.Op_DRightParen _>
                                          redirects: []
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.DParen
                                      left: <Id.Op_DLeftParen _>
                                      child: 
                                        (arith_expr.BinaryAssign
                                          op_id: Id.Arith_Equal
                                          left: ($ Id.Lit_ArithVarLike oav)
                                          right: ($ Id.Lit_ArithVarLike xav)
                                        )
                                      right: <Id.Op_DRightParen _>
                                      redirects: []
                                    )
                                  ]
                                  spids: [2610 2624]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                            (command.WhileUntil
                              keyword: <Id.KW_While while>
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (command.DParen
                                      left: <Id.Op_DLeftParen _>
                                      child: 
                                        (arith_expr.Binary
                                          op_id: Id.Arith_Less
                                          left: ($ Id.Lit_ArithVarLike nav)
                                          right: ($ Id.Lit_ArithVarLike oav)
                                        )
                                      right: <Id.Op_DRightParen _>
                                      redirects: []
                                    )
                                  ]
                                )
                              body: 
                                (command.DoGroup
                                  left: <Id.KW_Do do>
                                  children: [
                                    (command.ShAssignment
                                      left: <Id.Lit_ArrayLhsOpen 'cc['>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_ArrayLhsOpen 'cc['>
                                          lhs: 
                                            (sh_lhs_expr.IndexedName
                                              left: <Id.Lit_ArrayLhsOpen 'cc['>
                                              name: cc
                                              index: ($ Id.Lit_ArithVarLike ncc)
                                            )
                                          op: assign_op.Equal
                                          rhs: {($ Id.VSub_DollarName arg)}
                                        )
                                      ]
                                      redirects: []
                                    )
                                    (command.DParen
                                      left: <Id.Op_DLeftParen _>
                                      child: 
                                        (arith_expr.BinaryAssign
                                          op_id: Id.Arith_Equal
                                          left: ($ Id.Lit_ArithVarLike ncc)
                                          right: 
                                            (arith_expr.Binary
                                              op_id: Id.Arith_Plus
                                              left: ($ Id.Lit_ArithVarLike ncc)
                                              right: {<Id.Lit_Digits 1>}
                                            )
                                        )
                                      right: <Id.Op_DRightParen _>
                                      redirects: []
                                    )
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'arg='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'arg='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'arg='>
                                              name: arg
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (BracedVarSub
                                                left: <Id.Left_DollarBrace '${'>
                                                token: <Id.VSub_Name av>
                                                var_name: av
                                                bracket_op: 
                                                  (bracket_op.ArrayIndex
                                                    expr: ($ Id.Lit_ArithVarLike nav)
                                                  )
                                                right: <Id.Right_DollarBrace '}'>
                                              )
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                    (command.DParen
                                      left: <Id.Op_DLeftParen _>
                                      child: 
                                        (arith_expr.BinaryAssign
                                          op_id: Id.Arith_Equal
                                          left: ($ Id.Lit_ArithVarLike nav)
                                          right: 
                                            (arith_expr.Binary
                                              op_id: Id.Arith_Plus
                                              left: ($ Id.Lit_ArithVarLike nav)
                                              right: {<Id.Lit_Digits 1>}
                                            )
                                        )
                                      right: <Id.Op_DRightParen _>
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.KW_Done done>
                                )
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <->
                          pattern: 
                            (pat.Words
                              words: [
                                {<-> <Id.Lit_LBracket '['> <DIU> <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>}
                                {<-> <Id.Lit_LBracket '['> 
                                  <abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ> <Id.Lit_RBracket ']'> <Id.Lit_LBracket '['> 
                                  <abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_> <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_ArrayLhsOpen 'pp['>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_ArrayLhsOpen 'pp['>
                                  lhs: 
                                    (sh_lhs_expr.IndexedName
                                      left: <Id.Lit_ArrayLhsOpen 'pp['>
                                      name: pp
                                      index: ($ Id.Lit_ArithVarLike npp)
                                    )
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName arg)}
                                )
                              ]
                              redirects: []
                            )
                            (command.DParen
                              left: <Id.Op_DLeftParen _>
                              child: 
                                (arith_expr.BinaryAssign
                                  op_id: Id.Arith_Equal
                                  left: ($ Id.Lit_ArithVarLike npp)
                                  right: 
                                    (arith_expr.Binary
                                      op_id: Id.Arith_Plus
                                      left: ($ Id.Lit_ArithVarLike npp)
                                      right: {<Id.Lit_Digits 1>}
                                    )
                                )
                              right: <Id.Op_DRightParen _>
                              redirects: []
                            )
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName ppld)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Left_DoubleQuote '"'>
                                  pattern: (pat.Words words:[{(DQ )}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.Case
                                      case_kw: <Id.KW_Case case>
                                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName arg)})
                                      arms_start: <Id.KW_In in>
                                      arms: [
                                        (CaseArm
                                          left: <->
                                          pattern: 
                                            (pat.Words
                                              words: [
                                                {<-> <Id.Lit_LBracket '['> <DIU> <Id.Lit_RBracket ']'> 
                                                  <Id.Lit_Star '*'>
                                                }
                                              ]
                                            )
                                          middle: <Id.Right_CasePat _>
                                          action: [
                                            (command.ControlFlow
                                              keyword: <Id.ControlFlow_Continue continue>
                                            )
                                          ]
                                          right: <Id.Op_DSemi _>
                                        )
                                      ]
                                      arms_end: <Id.KW_Esac esac>
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName arg)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <-D->
                                  pattern: (pat.Words words:[{<-D-> <Id.Lit_Star '*'>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Continue continue>
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <-E>
                          pattern: (pat.Words words:[{<-E>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'ppstdout='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'ppstdout='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'ppstdout='>
                                      name: ppstdout
                                    )
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'doti='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'doti='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'doti='> name:doti)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <trap>
                              more_env: []
                              words: [{<trap>} {<0>} {<1>} {<2>} {<3>} {<15>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Continue continue>
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <-G>
                          pattern: (pat.Words words:[{<-G>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: 
                                (case_arg.Word
                                  w: 
                                    {
                                      (BracedVarSub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_Name av>
                                        var_name: av
                                        bracket_op: 
                                          (bracket_op.ArrayIndex
                                            expr: ($ Id.Lit_ArithVarLike nav)
                                          )
                                        right: <Id.Right_DollarBrace '}'>
                                      )
                                    }
                                )
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Lit_LBracket '['>
                                  pattern: 
                                    (pat.Words
                                      words: [
                                        {<Id.Lit_LBracket '['> <0-9> <Id.Lit_RBracket ']'> 
                                          <Id.Lit_Star '*'>
                                        }
                                      ]
                                    )
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_ArrayLhsOpen 'cc['>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_ArrayLhsOpen 'cc['>
                                          lhs: 
                                            (sh_lhs_expr.IndexedName
                                              left: <Id.Lit_ArrayLhsOpen 'cc['>
                                              name: cc
                                              index: ($ Id.Lit_ArithVarLike ncc)
                                            )
                                          op: assign_op.Equal
                                          rhs: {($ Id.VSub_DollarName arg)}
                                        )
                                      ]
                                      redirects: []
                                    )
                                    (command.DParen
                                      left: <Id.Op_DLeftParen _>
                                      child: 
                                        (arith_expr.BinaryAssign
                                          op_id: Id.Arith_Equal
                                          left: ($ Id.Lit_ArithVarLike ncc)
                                          right: 
                                            (arith_expr.Binary
                                              op_id: Id.Arith_Plus
                                              left: ($ Id.Lit_ArithVarLike ncc)
                                              right: {<Id.Lit_Digits 1>}
                                            )
                                        )
                                      right: <Id.Op_DRightParen _>
                                      redirects: []
                                    )
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'arg='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'arg='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'arg='>
                                              name: arg
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (BracedVarSub
                                                left: <Id.Left_DollarBrace '${'>
                                                token: <Id.VSub_Name av>
                                                var_name: av
                                                bracket_op: 
                                                  (bracket_op.ArrayIndex
                                                    expr: ($ Id.Lit_ArithVarLike nav)
                                                  )
                                                right: <Id.Right_DollarBrace '}'>
                                              )
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                    (command.DParen
                                      left: <Id.Op_DLeftParen _>
                                      child: 
                                        (arith_expr.BinaryAssign
                                          op_id: Id.Arith_Equal
                                          left: ($ Id.Lit_ArithVarLike nav)
                                          right: 
                                            (arith_expr.Binary
                                              op_id: Id.Arith_Plus
                                              left: ($ Id.Lit_ArithVarLike nav)
                                              right: {<Id.Lit_Digits 1>}
                                            )
                                        )
                                      right: <Id.Op_DRightParen _>
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <-P>
                          pattern: (pat.Words words:[{<-P>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'ppfile='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'ppfile='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ppfile='> name:ppfile)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'doti='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'doti='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'doti='> name:doti)
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <trap>
                              more_env: []
                              words: [{<trap>} {<0>} {<1>} {<2>} {<3>} {<15>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Continue continue>
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <->
                          pattern: 
                            (pat.Words
                              words: [
                                {<-> <Id.Lit_Pound '#'> <Id.Lit_Star '*'>}
                                {<-dryrun>}
                                {<--dryrun>}
                                {<-verbose>}
                                {<--verbose>}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'verbose='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'verbose='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'verbose='>
                                      name: verbose
                                    )
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_LBracket '['>
                          pattern: 
                            (pat.Words
                              words: [
                                {<Id.Lit_LBracket '['> <-> <Id.Lit_Other '+'> <Id.Lit_RBracket ']'> 
                                  <Id.Lit_Star '*'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.VSub_DollarName '$src1'>
                          pattern: 
                            (pat.Words
                              words: [
                                {($ Id.VSub_DollarName src1)}
                                {($ Id.VSub_DollarName src2)}
                                {($ Id.VSub_DollarName src3)}
                                {($ Id.VSub_DollarName src4)}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName ppstdout)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Left_DoubleQuote '"'>
                                  pattern: (pat.Words words:[{(DQ )}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'out='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'out='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'out='>
                                              name: out
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (BracedVarSub
                                                left: <Id.Left_DollarBrace '${'>
                                                token: <Id.VSub_Name arg>
                                                var_name: arg
                                                suffix_op: 
                                                  (suffix_op.Unary
                                                    op: <Id.VOp1_DPound '##'>
                                                    arg_word: {<Id.Lit_Other '*'> <Id.Lit_Slash '/'>}
                                                  )
                                                right: <Id.Right_DollarBrace '}'>
                                              )
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                    (command.Case
                                      case_kw: <Id.KW_Case case>
                                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName doti)})
                                      arms_start: <Id.KW_In in>
                                      arms: [
                                        (CaseArm
                                          left: <1>
                                          pattern: (pat.Words words:[{<1>}])
                                          middle: <Id.Right_CasePat _>
                                          action: [
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'out='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'out='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'out='>
                                                      name: out
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (BracedVarSub
                                                        left: <Id.Left_DollarBrace '${'>
                                                        token: <Id.VSub_Name out>
                                                        var_name: out
                                                        suffix_op: 
                                                          (suffix_op.Unary
                                                            op: <Id.VOp1_Percent '%'>
                                                            arg_word: {<.> <Id.Lit_Other '*'>}
                                                          )
                                                        right: <Id.Right_DollarBrace '}'>
                                                      ) <.i>
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'clobber='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'clobber='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'clobber='>
                                                      name: clobber
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (DQ ($ Id.VSub_DollarName clobber) <' '> 
                                                        ($ Id.VSub_DollarName out)
                                                      )
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                            (command.If
                                              if_kw: <Id.KW_If if>
                                              arms: [
                                                (IfArm
                                                  keyword: <Id.KW_If if>
                                                  cond: 
                                                    (condition.Shell
                                                      commands: [
                                                        (command.Simple
                                                          blame_tok: <test>
                                                          more_env: []
                                                          words: [
                                                            {<test>}
                                                            {<-L>}
                                                            {($ Id.VSub_DollarName out)}
                                                          ]
                                                          redirects: [
                                                            (Redir
                                                              op: <Id.Redir_Great '2>'>
                                                              loc: (redir_loc.Fd fd:2)
                                                              arg: {<'/dev/null'>}
                                                            )
                                                          ]
                                                          do_fork: T
                                                        )
                                                      ]
                                                    )
                                                  then_kw: <Id.KW_Then then>
                                                  action: [
                                                    (command.Case
                                                      case_kw: <Id.KW_Case case>
                                                      to_match: 
                                                        (case_arg.Word
                                                          w: {($ Id.VSub_DollarName verbose)}
                                                        )
                                                      arms_start: <Id.KW_In in>
                                                      arms: [
                                                        (CaseArm
                                                          left: <1>
                                                          pattern: (pat.Words words:[{<1>}])
                                                          middle: <Id.Right_CasePat _>
                                                          action: [
                                                            (command.Simple
                                                              blame_tok: <echo>
                                                              more_env: []
                                                              words: [
                                                                {<echo>}
                                                                {<Id.Lit_Other '+'>}
                                                                {<rm>}
                                                                {<-f>}
                                                                {($ Id.VSub_DollarName out)}
                                                              ]
                                                              redirects: []
                                                              do_fork: T
                                                            )
                                                          ]
                                                          right: <Id.Op_DSemi _>
                                                        )
                                                      ]
                                                      arms_end: <Id.KW_Esac esac>
                                                      redirects: []
                                                    )
                                                    (command.Case
                                                      case_kw: <Id.KW_Case case>
                                                      to_match: 
                                                        (case_arg.Word
                                                          w: {($ Id.VSub_DollarName exec)}
                                                        )
                                                      arms_start: <Id.KW_In in>
                                                      arms: [
                                                        (CaseArm
                                                          left: <1>
                                                          pattern: (pat.Words words:[{<1>}])
                                                          middle: <Id.Right_CasePat _>
                                                          action: [
                                                            (command.Simple
                                                              blame_tok: <rm>
                                                              more_env: []
                                                              words: [
                                                                {<rm>}
                                                                {<-f>}
                                                                {($ Id.VSub_DollarName out)}
                                                              ]
                                                              redirects: []
                                                              do_fork: T
                                                            )
                                                          ]
                                                          right: <Id.Op_DSemi _>
                                                        )
                                                      ]
                                                      arms_end: <Id.KW_Esac esac>
                                                      redirects: []
                                                    )
                                                  ]
                                                  spids: [3042 3054]
                                                )
                                              ]
                                              else_action: []
                                              fi_kw: <Id.KW_Fi fi>
                                              redirects: []
                                            )
                                            (command.Case
                                              case_kw: <Id.KW_Case case>
                                              to_match: 
                                                (case_arg.Word
                                                  w: 
                                                    {($ Id.VSub_DollarName linki) <Id.Lit_Colon ':'> 
                                                      ($ Id.VSub_DollarName ppfile)
                                                    }
                                                )
                                              arms_start: <Id.KW_In in>
                                              arms: [
                                                (CaseArm
                                                  left: <1>
                                                  pattern: 
                                                    (pat.Words
                                                      words: [{<1> <Id.Lit_Colon ':'>}]
                                                    )
                                                  middle: <Id.Right_CasePat _>
                                                  action: [
                                                    (command.ShAssignment
                                                      left: <Id.Lit_VarLike 'post='>
                                                      pairs: [
                                                        (AssignPair
                                                          left: <Id.Lit_VarLike 'post='>
                                                          lhs: 
                                                            (sh_lhs_expr.Name
                                                              left: <Id.Lit_VarLike 'post='>
                                                              name: post
                                                            )
                                                          op: assign_op.Equal
                                                          rhs: 
                                                            {
                                                              (DQ ($ Id.VSub_DollarName post) 
                                                                <' ln -s '> ($ Id.VSub_DollarName arg) <' '> ($ Id.VSub_DollarName out) <';'>
                                                              )
                                                            }
                                                        )
                                                      ]
                                                      redirects: []
                                                    )
                                                  ]
                                                  right: <Id.Op_DSemi _>
                                                )
                                              ]
                                              arms_end: <Id.KW_Esac esac>
                                              redirects: []
                                            )
                                          ]
                                          right: <Id.Op_DSemi _>
                                        )
                                        (CaseArm
                                          left: <Id.Lit_Star '*'>
                                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                                          middle: <Id.Right_CasePat _>
                                          action: [
                                            (command.Case
                                              case_kw: <Id.KW_Case case>
                                              to_match: 
                                                (case_arg.Word
                                                  w: {($ Id.VSub_DollarName clobber)}
                                                )
                                              arms_start: <Id.KW_In in>
                                              arms: [
                                                (CaseArm
                                                  left: <Id.Left_DoubleQuote '"'>
                                                  pattern: (pat.Words words:[{(DQ )}])
                                                  middle: <Id.Right_CasePat _>
                                                  action: [
                                                    (command.ShAssignment
                                                      left: <Id.Lit_VarLike 'clobber='>
                                                      pairs: [
                                                        (AssignPair
                                                          left: <Id.Lit_VarLike 'clobber='>
                                                          lhs: 
                                                            (sh_lhs_expr.Name
                                                              left: <Id.Lit_VarLike 'clobber='>
                                                              name: clobber
                                                            )
                                                          op: assign_op.Equal
                                                          rhs: {($ Id.VSub_DollarName tmp)}
                                                        )
                                                      ]
                                                      redirects: []
                                                    )
                                                    (command.Case
                                                      case_kw: <Id.KW_Case case>
                                                      to_match: 
                                                        (case_arg.Word
                                                          w: {($ Id.VSub_DollarName verbose)}
                                                        )
                                                      arms_start: <Id.KW_In in>
                                                      arms: [
                                                        (CaseArm
                                                          left: <1>
                                                          pattern: (pat.Words words:[{<1>}])
                                                          middle: <Id.Right_CasePat _>
                                                          action: [
                                                            (command.Simple
                                                              blame_tok: <print>
                                                              more_env: []
                                                              words: [
                                                                {<print>}
                                                                {<-r>}
                                                                {<-->}
                                                                {<Id.Lit_Other '+'>}
                                                                {<mkdir>}
                                                                {($ Id.VSub_DollarName tmp)}
                                                              ]
                                                              redirects: []
                                                              do_fork: T
                                                            )
                                                          ]
                                                          right: <Id.Op_DSemi _>
                                                        )
                                                      ]
                                                      arms_end: <Id.KW_Esac esac>
                                                      redirects: []
                                                    )
                                                    (command.Case
                                                      case_kw: <Id.KW_Case case>
                                                      to_match: 
                                                        (case_arg.Word
                                                          w: {($ Id.VSub_DollarName exec)}
                                                        )
                                                      arms_start: <Id.KW_In in>
                                                      arms: [
                                                        (CaseArm
                                                          left: <1>
                                                          pattern: (pat.Words words:[{<1>}])
                                                          middle: <Id.Right_CasePat _>
                                                          action: [
                                                            (command.AndOr
                                                              children: [
                                                                (command.Simple
                                                                  blame_tok: <mkdir>
                                                                  more_env: []
                                                                  words: [
                                                                    {<mkdir>}
                                                                    {($ Id.VSub_DollarName tmp)}
                                                                  ]
                                                                  redirects: []
                                                                  do_fork: T
                                                                )
                                                                (command.ControlFlow
                                                                  keyword: <Id.ControlFlow_Exit exit>
                                                                )
                                                              ]
                                                              ops: [<Id.Op_DPipe _>]
                                                            )
                                                          ]
                                                          right: <Id.Op_DSemi _>
                                                        )
                                                      ]
                                                      arms_end: <Id.KW_Esac esac>
                                                      redirects: []
                                                    )
                                                  ]
                                                  right: <Id.Op_DSemi _>
                                                )
                                              ]
                                              arms_end: <Id.KW_Esac esac>
                                              redirects: []
                                            )
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'out='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'out='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'out='>
                                                      name: out
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {($ Id.VSub_DollarName tmp) <'/'> 
                                                      ($ Id.VSub_DollarName out)
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                          ]
                                          right: <Id.Op_DSemi _>
                                        )
                                      ]
                                      arms_end: <Id.KW_Esac esac>
                                      redirects: []
                                    )
                                    (command.ShAssignment
                                      left: <Id.Lit_ArrayLhsOpen 'pp['>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_ArrayLhsOpen 'pp['>
                                          lhs: 
                                            (sh_lhs_expr.IndexedName
                                              left: <Id.Lit_ArrayLhsOpen 'pp['>
                                              name: pp
                                              index: 
                                                (arith_expr.Binary
                                                  op_id: Id.Arith_Plus
                                                  left: ($ Id.Lit_ArithVarLike npp)
                                                  right: {<Id.Lit_Digits 1>}
                                                )
                                            )
                                          op: assign_op.Equal
                                          rhs: {($ Id.VSub_DollarName out)}
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_ArrayLhsOpen 'pp['>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_ArrayLhsOpen 'pp['>
                                  lhs: 
                                    (sh_lhs_expr.IndexedName
                                      left: <Id.Lit_ArrayLhsOpen 'pp['>
                                      name: pp
                                      index: ($ Id.Lit_ArithVarLike npp)
                                    )
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName arg)}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'arg='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'arg='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName out)}
                                )
                              ]
                              redirects: []
                            )
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName verbose)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <1>
                                  pattern: (pat.Words words:[{<1>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.Simple
                                      blame_tok: <print>
                                      more_env: []
                                      words: [
                                        {<print>}
                                        {<-r>}
                                        {<-->}
                                        {<Id.Lit_Other '+'>}
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Name pp>
                                              var_name: pp
                                              bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                              right: <Id.Right_DollarBrace '}'>
                                            )
                                          )
                                        }
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{($ Id.VSub_DollarName exec)})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <1>
                                  pattern: (pat.Words words:[{<1>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.AndOr
                                      children: [
                                        (command.Simple
                                          blame_tok: <Id.Left_DoubleQuote '"'>
                                          more_env: []
                                          words: [
                                            {
                                              (DQ 
                                                (BracedVarSub
                                                  left: <Id.Left_DollarBrace '${'>
                                                  token: <Id.VSub_Name pp>
                                                  var_name: pp
                                                  bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                                  right: <Id.Right_DollarBrace '}'>
                                                )
                                              )
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.ControlFlow
                                          keyword: <Id.ControlFlow_Exit exit>
                                        )
                                      ]
                                      ops: [<Id.Op_DPipe _>]
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_ArrayLhsOpen 'cc['>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_ArrayLhsOpen 'cc['>
                          lhs: 
                            (sh_lhs_expr.IndexedName
                              left: <Id.Lit_ArrayLhsOpen 'cc['>
                              name: cc
                              index: ($ Id.Lit_ArithVarLike ncc)
                            )
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName arg)}
                        )
                      ]
                      redirects: []
                    )
                    (command.DParen
                      left: <Id.Op_DLeftParen _>
                      child: 
                        (arith_expr.BinaryAssign
                          op_id: Id.Arith_Equal
                          left: ($ Id.Lit_ArithVarLike ncc)
                          right: 
                            (arith_expr.Binary
                              op_id: Id.Arith_Plus
                              left: ($ Id.Lit_ArithVarLike ncc)
                              right: {<Id.Lit_Digits 1>}
                            )
                        )
                      right: <Id.Op_DRightParen _>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: 
                (case_arg.Word
                  w: {($ Id.VSub_DollarName ppfile) ($ Id.VSub_DollarName ppstdout)}
                )
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Left_DoubleQuote '"'>
                  pattern: (pat.Words words:[{(DQ )}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName verbose)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <1>
                          pattern: (pat.Words words:[{<1>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <print>
                              more_env: []
                              words: [
                                {<print>}
                                {<-r>}
                                {<-->}
                                {<Id.Lit_Other '+'>}
                                {
                                  (DQ 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name cc>
                                      var_name: cc
                                      bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                      right: <Id.Right_DollarBrace '}'>
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName exec)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <1>
                          pattern: (pat.Words words:[{<1>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <Id.Left_DoubleQuote '"'>
                              more_env: []
                              words: [
                                {
                                  (DQ 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name cc>
                                      var_name: cc
                                      bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                      right: <Id.Right_DollarBrace '}'>
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
        )
      ]
      arms_end: <Id.KW_Esac esac>
      redirects: []
    )
  ]
)