(command.CommandList
  children: [
    (command.ShFunction
      name_tok: <getopts_long>
      name: getopts_long
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <Id.Lit_LBracket '['>
                  more_env: []
                  words: [
                    {<Id.Lit_LBracket '['>}
                    {<-n>}
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name ZSH_VERSION>
                          var_name: ZSH_VERSION
                          suffix_op: (suffix_op.Unary op:<Id.VTest_Plus _> arg_word:{<z>})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                    {<Id.Lit_RBracket ']'>}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <emulate>
                  more_env: []
                  words: [{<emulate>} {<-L>} {<sh>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <unset>
                  more_env: []
                  words: [{<unset>} {<OPTLERR>} {<OPTLARG>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName OPTLIND))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Left_DoubleQuote '"'>
                  pattern: 
                    (pat.Words
                      words: [
                        {(DQ )}
                        {<0>}
                        {<Id.Lit_Star '*'> <Id.Lit_LBracket '['> <Id.KW_Bang '!'> <0-9> 
                          <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>
                        }
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'OPTLIND='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'OPTLIND='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLIND='> name:OPTLIND)
                          op: assign_op.Equal
                          rhs: {<1>}
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'OPTLPENDING='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'OPTLPENDING='>
                              name: OPTLPENDING
                            )
                          op: assign_op.Equal
                          rhs: (rhs_word__Empty)
                        )
                      ]
                      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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(DQ ($ Id.VSub_Pound '#'))}
                                {<-lt>}
                                {<2>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <printf>
                      more_env: []
                      words: [{<printf>} {(SQ <'getopts_long: not enough arguments\\n'>)}]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [697 712]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <command>
              more_env: [(EnvPair left:<Id.Lit_VarLike 'LC_ALL='> name:LC_ALL val:{<C>})]
              words: [
                {<command>}
                {<eval>}
                {
                  (SQ <'\n'> <'    case "$2" in\n'> <'      *[!a-zA-Z_0-9]*|""|[0-9]*)\n'> 
                    <'\tprintf >&2 "getopts_long: invalid variable name: \\`%s'>
                  ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') 
                  (SQ <'\\n" "$2"\n'> <'\treturn 1\n'> <'\t;;\n'> <'    esac'>)
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Lit_Colon ':'>
                  pattern: 
                    (pat.Words
                      words: [
                        {<Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Id.Lit_Star '*'>}
                        {<Id.Lit_Star '*'> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
                          <Id.Lit_Star '*'>
                        }
                        {<Id.Lit_Star '*'> <-> <Id.Lit_Star '*'>}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <printf>
                      more_env: []
                      words: [
                        {<printf>}
                        {
                          (DQ <'getopts_long: invalid option specification: '> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\`'>
                              ch: '`'
                            ) <'%s\''> <Id.Lit_BadBackslash '\\'> <n>
                          )
                        }
                        {(DQ ($ Id.VSub_Number 1))}
                      ]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {<1>}
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {<4>} {(DQ ($ Id.VSub_At '@'))}]
              redirects: []
              do_fork: T
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <Id.Lit_Colon ':'>
                          more_env: []
                          words: [{<Id.Lit_Colon ':'>}]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.AndOr
                                  children: [
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {(DQ ($ Id.VSub_Number 1))}
                                        {<-gt>}
                                        {(DQ ($ Id.VSub_Pound '#'))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (BraceGroup
                                      left: <Id.Lit_LBrace '{'>
                                      children: [
                                        (command.Simple
                                          blame_tok: <eval>
                                          more_env: []
                                          words: [
                                            {<eval>}
                                            {(SQ <'set -- "${'>) (DQ ($ Id.VSub_Number 1)) 
                                              (SQ <'}" "$@"'>)
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.AndOr
                                          children: [
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {<-n>}
                                                {(DQ ($ Id.VSub_Number 1))}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                            (command.ControlFlow
                                              keyword: <Id.ControlFlow_Break break>
                                            )
                                          ]
                                          ops: [<Id.Op_DPipe _>]
                                        )
                                        (command.Simple
                                          blame_tok: <Id.Lit_LBracket '['>
                                          more_env: []
                                          words: [
                                            {<Id.Lit_LBracket '['>}
                                            {
                                              (DQ 
                                                (word_part.ArithSub
                                                  left: <Id.Left_DollarDParen '$(('>
                                                  anode: 
                                                    (arith_expr.Binary
                                                      op_id: Id.Arith_Plus
                                                      left: {($ Id.VSub_Number 2)}
                                                      right: {<Id.Lit_Digits 2>}
                                                    )
                                                  right: <Id.Right_DollarDParen _>
                                                )
                                              )
                                            }
                                            {<-gt>}
                                            {(DQ ($ Id.VSub_Pound '#'))}
                                            {<Id.Lit_RBracket ']'>}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                      redirects: []
                                      right: <Id.Lit_RBrace '}'>
                                    )
                                  ]
                                  ops: [<Id.Op_DPipe _>]
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <printf>
                              more_env: []
                              words: [
                                {<printf>}
                                {
                                  (DQ 
                                    <
'getopts_long: long option specifications must end in an empty argument'
                                    > <Id.Lit_BadBackslash '\\'> <n>
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [851 926]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <eval>
                      more_env: []
                      words: [
                        {<eval>}
                        {(SQ <'set -- "${'>) 
                          (DQ 
                            (word_part.ArithSub
                              left: <Id.Left_DollarDParen '$(('>
                              anode: 
                                (arith_expr.Binary
                                  op_id: Id.Arith_Plus
                                  left: {($ Id.VSub_Number 2)}
                                  right: {<Id.Lit_Digits 2>}
                                )
                              right: <Id.Right_DollarDParen _>
                            )
                          ) (SQ <'}" "$@"'>)
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 2))})
                      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.Simple
                              blame_tok: <printf>
                              more_env: []
                              words: [
                                {<printf>}
                                {
                                  (DQ <'getopts_long: invalid long option name: '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\`'>
                                      ch: '`'
                                    ) <'%s\''> <Id.Lit_BadBackslash '\\'> <n>
                                  )
                                }
                                {(DQ ($ Id.VSub_Number 2))}
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<1>}
                            )
                          ]
                          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:{(DQ ($ Id.VSub_Number 1))})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <0>
                          pattern: (pat.Words words:[{<0>} {<no_argument>}])
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <1>
                          pattern: (pat.Words words:[{<1>} {<required_argument>}])
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <2>
                          pattern: (pat.Words words:[{<2>} {<optional_argument>}])
                          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: <printf>
                              more_env: []
                              words: [
                                {<printf>}
                                {
                                  (DQ <'getopts_long: invalid long option type: '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\`'>
                                      ch: '`'
                                    ) <'%s\''> <Id.Lit_BadBackslash '\\'> <n>
                                  )
                                }
                                {(DQ ($ Id.VSub_Number 1))}
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<1>}
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <eval>
                      more_env: []
                      words: [
                        {<eval>}
                        {
                          (DQ <'shift 3; set '> 
                            (word_part.ArithSub
                              left: <Id.Left_DollarDParen '$(('>
                              anode: 
                                (arith_expr.Binary
                                  op_id: Id.Arith_Plus
                                  left: {($ Id.VSub_Number 3)}
                                  right: {<Id.Lit_Digits 2>}
                                )
                              right: <Id.Right_DollarDParen _>
                            )
                          ) (SQ <' "$@"'>)
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <shift>
              more_env: []
              words: [{<shift>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <eval>
              more_env: []
              words: [
                {<eval>}
                {
                  (DQ <'shift; set '> 
                    (word_part.ArithSub
                      left: <Id.Left_DollarDParen '$(('>
                      anode: 
                        (arith_expr.Binary
                          op_id: Id.Arith_Plus
                          left: {($ Id.VSub_Number 1)}
                          right: {($ Id.VSub_DollarName OPTLIND)}
                        )
                      right: <Id.Right_DollarDParen _>
                    )
                  ) (SQ <' "$@"'>)
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-z>}
                                {(DQ ($ Id.VSub_DollarName OPTLPENDING))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <Id.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {(DQ ($ Id.VSub_Number 1))}
                            {<-le>}
                            {(DQ ($ Id.VSub_Pound '#'))}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {<1>}
                        )
                      ]
                      ops: [<Id.Op_DPipe _>]
                    )
                    (command.Simple
                      blame_tok: <eval>
                      more_env: []
                      words: [{<eval>} {(SQ <'set -- "${'>) (DQ ($ Id.VSub_Number 1)) (SQ <'}" "$@"'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <-->
                          pattern: (pat.Words words:[{<-->}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'OPTLIND='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'OPTLIND='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'OPTLIND='>
                                      name: OPTLIND
                                    )
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (word_part.ArithSub
                                        left: <Id.Left_DollarDParen '$(('>
                                        anode: 
                                          (arith_expr.Binary
                                            op_id: Id.Arith_Plus
                                            left: {($ Id.VSub_DollarName OPTLIND)}
                                            right: {<Id.Lit_Digits 1>}
                                          )
                                        right: <Id.Right_DollarDParen _>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<1>}
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <-->
                          pattern: (pat.Words words:[{<--> <Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'OPTLIND='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'OPTLIND='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'OPTLIND='>
                                      name: OPTLIND
                                    )
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (word_part.ArithSub
                                        left: <Id.Left_DollarDParen '$(('>
                                        anode: 
                                          (arith_expr.Binary
                                            op_id: Id.Arith_Plus
                                            left: {($ Id.VSub_DollarName OPTLIND)}
                                            right: {<Id.Lit_Digits 1>}
                                          )
                                        right: <Id.Right_DollarDParen _>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <->
                          pattern: (pat.Words words:[{<-> <Id.Lit_QMark '?'> <Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'OPTLPENDING='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'OPTLPENDING='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                                      name: OPTLPENDING
                                    )
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_Number 1>
                                          var_name: 1
                                          suffix_op: 
                                            (suffix_op.Unary
                                              op: <Id.VOp1_Pound '#'>
                                              arg_word: {<->}
                                            )
                                          right: <Id.Right_DollarBrace '}'>
                                        )
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              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.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<1>}
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  spids: [1142 1155]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName OPTLPENDING))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'OPTLARG='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'OPTLARG='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLARG='> name:OPTLARG)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name OPTLPENDING>
                                var_name: OPTLPENDING
                                suffix_op: 
                                  (suffix_op.Unary
                                    op: <Id.VOp1_Percent '%'>
                                    arg_word: 
                                      {
                                        (DQ 
                                          (BracedVarSub
                                            left: <Id.Left_DollarBrace '${'>
                                            token: <Id.VSub_Name OPTLPENDING>
                                            var_name: OPTLPENDING
                                            suffix_op: 
                                              (suffix_op.Unary
                                                op: <Id.VOp1_Pound '#'>
                                                arg_word: {<Id.Lit_Other '?'>}
                                              )
                                            right: <Id.Right_DollarBrace '}'>
                                          )
                                        )
                                      }
                                  )
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [
                        {<set>}
                        {<-->}
                        {(DQ ($ Id.VSub_DollarName OPTLARG))}
                        {(DQ ($ Id.VSub_At '@'))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'OPTLPENDING='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'OPTLPENDING='>
                              name: OPTLPENDING
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name OPTLPENDING>
                                  var_name: OPTLPENDING
                                  suffix_op: 
                                    (suffix_op.Unary
                                      op: <Id.VOp1_Pound '#'>
                                      arg_word: {<Id.Lit_Other '?'>}
                                    )
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <unset>
                      more_env: []
                      words: [{<unset>} {<OPTLARG>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <Id.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {<-n>}
                            {(DQ ($ Id.VSub_DollarName OPTLPENDING))}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'OPTLIND='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'OPTLIND='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLIND='> name:OPTLIND)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (word_part.ArithSub
                                    left: <Id.Left_DollarDParen '$(('>
                                    anode: 
                                      (arith_expr.Binary
                                        op_id: Id.Arith_Plus
                                        left: {($ Id.VSub_DollarName OPTLIND)}
                                        right: {<Id.Lit_Digits 1>}
                                      )
                                    right: <Id.Right_DollarDParen _>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                      ]
                      ops: [<Id.Op_DPipe _>]
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{(DQ ($ 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_Colon ':'> <Id.Lit_RBracket ']'>}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'OPTLERR='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'OPTLERR='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'OPTLERR='>
                                      name: OPTLERR
                                    )
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ <'bad option: '> 
                                        (word_part.EscapedLiteral
                                          token: <Id.Lit_EscapedChar '\\`'>
                                          ch: '`'
                                        ) <-> ($ Id.VSub_Number 1) <'\''>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 3))})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Lit_Colon ':'>
                                  pattern: (pat.Words words:[{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}])
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.Simple
                                      blame_tok: <eval>
                                      more_env: []
                                      words: [{<eval>} {(DQ ($ Id.VSub_Number 4) <'=:'>)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'OPTLARG='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'OPTLARG='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'OPTLARG='>
                                              name: OPTLARG
                                            )
                                          op: assign_op.Equal
                                          rhs: {(DQ ($ 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.Simple
                                      blame_tok: <printf>
                                      more_env: []
                                      words: [
                                        {<printf>}
                                        {(SQ <'%s\\n'>)}
                                        {(DQ ($ Id.VSub_DollarName OPTLERR))}
                                      ]
                                      redirects: [
                                        (Redir
                                          op: <Id.Redir_GreatAnd '>&'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {<2>}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <eval>
                                      more_env: []
                                      words: [{<eval>} {(DQ ($ Id.VSub_Number 4) <'=\'?\''>)}]
                                      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.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 3))})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Lit_Star '*'>
                                  pattern: 
                                    (pat.Words
                                      words: [
                                        {<Id.Lit_Star '*'> (DQ ($ Id.VSub_Number 1)) 
                                          <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Id.Lit_Star '*'>
                                        }
                                      ]
                                    )
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.Simple
                                      blame_tok: <eval>
                                      more_env: []
                                      words: [
                                        {<eval>}
                                        {
                                          (DQ ($ Id.VSub_Number 4) <'='> 
                                            (word_part.EscapedLiteral
                                              token: <Id.Lit_EscapedChar '\\"'>
                                              ch: '"'
                                            ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <1> 
                                            (word_part.EscapedLiteral
                                              token: <Id.Lit_EscapedChar '\\"'>
                                              ch: '"'
                                            )
                                          )
                                        }
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.If
                                      if_kw: <Id.KW_If if>
                                      arms: [
                                        (IfArm
                                          keyword: <Id.KW_If if>
                                          cond: 
                                            (condition.Shell
                                              commands: [
                                                (command.Sentence
                                                  child: 
                                                    (command.Simple
                                                      blame_tok: <Id.Lit_LBracket '['>
                                                      more_env: []
                                                      words: [
                                                        {<Id.Lit_LBracket '['>}
                                                        {<-n>}
                                                        {(DQ ($ Id.VSub_DollarName OPTLPENDING))}
                                                        {<Id.Lit_RBracket ']'>}
                                                      ]
                                                      redirects: []
                                                      do_fork: T
                                                    )
                                                  terminator: <Id.Op_Semi _>
                                                )
                                              ]
                                            )
                                          then_kw: <Id.KW_Then then>
                                          action: [
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'OPTLARG='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'OPTLARG='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'OPTLARG='>
                                                      name: OPTLARG
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: {(DQ ($ Id.VSub_DollarName OPTLPENDING))}
                                                )
                                              ]
                                              redirects: []
                                            )
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'OPTLPENDING='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'OPTLPENDING='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                                                      name: OPTLPENDING
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: (rhs_word__Empty)
                                                )
                                              ]
                                              redirects: []
                                            )
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'OPTLIND='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'OPTLIND='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'OPTLIND='>
                                                      name: OPTLIND
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (word_part.ArithSub
                                                        left: <Id.Left_DollarDParen '$(('>
                                                        anode: 
                                                          (arith_expr.Binary
                                                            op_id: Id.Arith_Plus
                                                            left: {($ Id.VSub_DollarName OPTLIND)}
                                                            right: {<Id.Lit_Digits 1>}
                                                          )
                                                        right: <Id.Right_DollarDParen _>
                                                      )
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                          ]
                                          spids: [1509 1522]
                                        )
                                      ]
                                      else_action: []
                                      fi_kw: <Id.KW_Fi fi>
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                                (CaseArm
                                  left: <Id.Lit_Star '*'>
                                  pattern: 
                                    (pat.Words
                                      words: [
                                        {<Id.Lit_Star '*'> (DQ ($ Id.VSub_Number 1)) 
                                          <Id.Lit_Colon ':'> <Id.Lit_Star '*'>
                                        }
                                      ]
                                    )
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.If
                                      if_kw: <Id.KW_If if>
                                      arms: [
                                        (IfArm
                                          keyword: <Id.KW_If if>
                                          cond: 
                                            (condition.Shell
                                              commands: [
                                                (command.Sentence
                                                  child: 
                                                    (command.Simple
                                                      blame_tok: <Id.Lit_LBracket '['>
                                                      more_env: []
                                                      words: [
                                                        {<Id.Lit_LBracket '['>}
                                                        {<-n>}
                                                        {(DQ ($ Id.VSub_DollarName OPTLPENDING))}
                                                        {<Id.Lit_RBracket ']'>}
                                                      ]
                                                      redirects: []
                                                      do_fork: T
                                                    )
                                                  terminator: <Id.Op_Semi _>
                                                )
                                              ]
                                            )
                                          then_kw: <Id.KW_Then then>
                                          action: [
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'OPTLARG='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'OPTLARG='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'OPTLARG='>
                                                      name: OPTLARG
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: {(DQ ($ Id.VSub_DollarName OPTLPENDING))}
                                                )
                                              ]
                                              redirects: []
                                            )
                                            (command.Simple
                                              blame_tok: <eval>
                                              more_env: []
                                              words: [
                                                {<eval>}
                                                {
                                                  (DQ ($ Id.VSub_Number 4) <'='> 
                                                    (word_part.EscapedLiteral
                                                      token: <Id.Lit_EscapedChar '\\"'>
                                                      ch: '"'
                                                    ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <1> 
                                                    (word_part.EscapedLiteral
                                                      token: <Id.Lit_EscapedChar '\\"'>
                                                      ch: '"'
                                                    )
                                                  )
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'OPTLPENDING='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'OPTLPENDING='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                                                      name: OPTLPENDING
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: (rhs_word__Empty)
                                                )
                                              ]
                                              redirects: []
                                            )
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'OPTLIND='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'OPTLIND='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'OPTLIND='>
                                                      name: OPTLIND
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (word_part.ArithSub
                                                        left: <Id.Left_DollarDParen '$(('>
                                                        anode: 
                                                          (arith_expr.Binary
                                                            op_id: Id.Arith_Plus
                                                            left: {($ Id.VSub_DollarName OPTLIND)}
                                                            right: {<Id.Lit_Digits 1>}
                                                          )
                                                        right: <Id.Right_DollarDParen _>
                                                      )
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                          ]
                                          spids: [1568 1581]
                                        )
                                      ]
                                      else_kw: <Id.KW_Else else>
                                      else_action: [
                                        (command.If
                                          if_kw: <Id.KW_If if>
                                          arms: [
                                            (IfArm
                                              keyword: <Id.KW_If if>
                                              cond: 
                                                (condition.Shell
                                                  commands: [
                                                    (command.Sentence
                                                      child: 
                                                        (command.Simple
                                                          blame_tok: <Id.Lit_LBracket '['>
                                                          more_env: []
                                                          words: [
                                                            {<Id.Lit_LBracket '['>}
                                                            {
                                                              (DQ 
                                                                (word_part.ArithSub
                                                                  left: <Id.Left_DollarDParen '$(('>
                                                                  anode: 
                                                                    (arith_expr.Binary
                                                                      op_id: Id.Arith_Plus
                                                                      left: {($ Id.VSub_Number 2)}
                                                                      right: {<Id.Lit_Digits 2>}
                                                                    )
                                                                  right: <Id.Right_DollarDParen _>
                                                                )
                                                              )
                                                            }
                                                            {<-gt>}
                                                            {(DQ ($ Id.VSub_Pound '#'))}
                                                            {<Id.Lit_RBracket ']'>}
                                                          ]
                                                          redirects: []
                                                          do_fork: T
                                                        )
                                                      terminator: <Id.Op_Semi _>
                                                    )
                                                  ]
                                                )
                                              then_kw: <Id.KW_Then then>
                                              action: [
                                                (command.ShAssignment
                                                  left: <Id.Lit_VarLike 'OPTLERR='>
                                                  pairs: [
                                                    (AssignPair
                                                      left: <Id.Lit_VarLike 'OPTLERR='>
                                                      lhs: 
                                                        (sh_lhs_expr.Name
                                                          left: <Id.Lit_VarLike 'OPTLERR='>
                                                          name: OPTLERR
                                                        )
                                                      op: assign_op.Equal
                                                      rhs: 
                                                        {
                                                          (DQ <'option '> 
                                                            (word_part.EscapedLiteral
                                                              token: <Id.Lit_EscapedChar '\\`'>
                                                              ch: '`'
                                                            ) <-> ($ Id.VSub_Number 1) <'\' requires an argument'>
                                                          )
                                                        }
                                                    )
                                                  ]
                                                  redirects: []
                                                )
                                                (command.Case
                                                  case_kw: <Id.KW_Case case>
                                                  to_match: 
                                                    (case_arg.Word
                                                      w: {(DQ ($ Id.VSub_Number 3))}
                                                    )
                                                  arms_start: <Id.KW_In in>
                                                  arms: [
                                                    (CaseArm
                                                      left: <Id.Lit_Colon ':'>
                                                      pattern: 
                                                        (pat.Words
                                                          words: [
                                                            {<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}
                                                          ]
                                                        )
                                                      middle: <Id.Right_CasePat _>
                                                      action: [
                                                        (command.Simple
                                                          blame_tok: <eval>
                                                          more_env: []
                                                          words: [
                                                            {<eval>}
                                                            {(DQ ($ Id.VSub_Number 4) <'=:'>)}
                                                          ]
                                                          redirects: []
                                                          do_fork: T
                                                        )
                                                        (command.ShAssignment
                                                          left: <Id.Lit_VarLike 'OPTLARG='>
                                                          pairs: [
                                                            (AssignPair
                                                              left: <Id.Lit_VarLike 'OPTLARG='>
                                                              lhs: 
                                                                (sh_lhs_expr.Name
                                                                  left: <Id.Lit_VarLike 'OPTLARG='>
                                                                  name: OPTLARG
                                                                )
                                                              op: assign_op.Equal
                                                              rhs: {(DQ ($ 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.Simple
                                                          blame_tok: <printf>
                                                          more_env: []
                                                          words: [
                                                            {<printf>}
                                                            {(SQ <'%s\\n'>)}
                                                            {(DQ ($ Id.VSub_DollarName OPTLERR))}
                                                          ]
                                                          redirects: [
                                                            (Redir
                                                              op: <Id.Redir_GreatAnd '>&'>
                                                              loc: (redir_loc.Fd fd:1)
                                                              arg: {<2>}
                                                            )
                                                          ]
                                                          do_fork: T
                                                        )
                                                        (command.Simple
                                                          blame_tok: <eval>
                                                          more_env: []
                                                          words: [
                                                            {<eval>}
                                                            {(DQ ($ Id.VSub_Number 4) <'=\'?\''>)}
                                                          ]
                                                          redirects: []
                                                          do_fork: T
                                                        )
                                                      ]
                                                      right: <Id.Op_DSemi _>
                                                    )
                                                  ]
                                                  arms_end: <Id.KW_Esac esac>
                                                  redirects: []
                                                )
                                              ]
                                              spids: [1627 1651]
                                            )
                                          ]
                                          else_kw: <Id.KW_Else else>
                                          else_action: [
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'OPTLIND='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'OPTLIND='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'OPTLIND='>
                                                      name: OPTLIND
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (word_part.ArithSub
                                                        left: <Id.Left_DollarDParen '$(('>
                                                        anode: 
                                                          (arith_expr.Binary
                                                            op_id: Id.Arith_Plus
                                                            left: {($ Id.VSub_DollarName OPTLIND)}
                                                            right: {<Id.Lit_Digits 1>}
                                                          )
                                                        right: <Id.Right_DollarDParen _>
                                                      )
                                                    }
                                                )
                                              ]
                                              redirects: []
                                            )
                                            (command.Simple
                                              blame_tok: <eval>
                                              more_env: []
                                              words: [
                                                {<eval>}
                                                {
                                                  (DQ <'OPTLARG='> 
                                                    (word_part.EscapedLiteral
                                                      token: <Id.Lit_EscapedChar '\\"'>
                                                      ch: '"'
                                                    ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'{'> 
                                                    (word_part.ArithSub
                                                      left: <Id.Left_DollarDParen '$(('>
                                                      anode: 
                                                        (arith_expr.Binary
                                                          op_id: Id.Arith_Plus
                                                          left: {($ Id.VSub_Number 2)}
                                                          right: {<Id.Lit_Digits 2>}
                                                        )
                                                      right: <Id.Right_DollarDParen _>
                                                    ) <'}'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"')
                                                  )
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                            (command.Simple
                                              blame_tok: <eval>
                                              more_env: []
                                              words: [
                                                {<eval>}
                                                {
                                                  (DQ ($ Id.VSub_Number 4) <'='> 
                                                    (word_part.EscapedLiteral
                                                      token: <Id.Lit_EscapedChar '\\"'>
                                                      ch: '"'
                                                    ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <1> 
                                                    (word_part.EscapedLiteral
                                                      token: <Id.Lit_EscapedChar '\\"'>
                                                      ch: '"'
                                                    )
                                                  )
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          ]
                                          fi_kw: <Id.KW_Fi fi>
                                          redirects: []
                                        )
                                      ]
                                      fi_kw: <Id.KW_Fi fi>
                                      redirects: []
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                                (CaseArm
                                  left: <Id.Lit_Star '*'>
                                  pattern: 
                                    (pat.Words
                                      words: [
                                        {<Id.Lit_Star '*'> (DQ ($ Id.VSub_Number 1)) <Id.Lit_Star '*'>}
                                      ]
                                    )
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.Simple
                                      blame_tok: <eval>
                                      more_env: []
                                      words: [
                                        {<eval>}
                                        {
                                          (DQ ($ Id.VSub_Number 4) <'='> 
                                            (word_part.EscapedLiteral
                                              token: <Id.Lit_EscapedChar '\\"'>
                                              ch: '"'
                                            ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <1> 
                                            (word_part.EscapedLiteral
                                              token: <Id.Lit_EscapedChar '\\"'>
                                              ch: '"'
                                            )
                                          )
                                        }
                                      ]
                                      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 'OPTLERR='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'OPTLERR='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'OPTLERR='>
                                              name: OPTLERR
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (DQ <'bad option: '> 
                                                (word_part.EscapedLiteral
                                                  token: <Id.Lit_EscapedChar '\\`'>
                                                  ch: '`'
                                                ) <-> ($ Id.VSub_Number 1) <'\''>
                                              )
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                    (command.Case
                                      case_kw: <Id.KW_Case case>
                                      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 3))})
                                      arms_start: <Id.KW_In in>
                                      arms: [
                                        (CaseArm
                                          left: <Id.Lit_Colon ':'>
                                          pattern: 
                                            (pat.Words
                                              words: [{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}]
                                            )
                                          middle: <Id.Right_CasePat _>
                                          action: [
                                            (command.Simple
                                              blame_tok: <eval>
                                              more_env: []
                                              words: [{<eval>} {(DQ ($ Id.VSub_Number 4) <'=:'>)}]
                                              redirects: []
                                              do_fork: T
                                            )
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'OPTLARG='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'OPTLARG='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'OPTLARG='>
                                                      name: OPTLARG
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: {(DQ ($ 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.Simple
                                              blame_tok: <printf>
                                              more_env: []
                                              words: [
                                                {<printf>}
                                                {(SQ <'%s\\n'>)}
                                                {(DQ ($ Id.VSub_DollarName OPTLERR))}
                                              ]
                                              redirects: [
                                                (Redir
                                                  op: <Id.Redir_GreatAnd '>&'>
                                                  loc: (redir_loc.Fd fd:1)
                                                  arg: {<2>}
                                                )
                                              ]
                                              do_fork: T
                                            )
                                            (command.Simple
                                              blame_tok: <eval>
                                              more_env: []
                                              words: [{<eval>} {(DQ ($ Id.VSub_Number 4) <'=\'?\''>)}]
                                              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: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  spids: [1285 1298]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'OPTLPENDING='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLPENDING='> name:OPTLPENDING)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number 1))}
                    )
                  ]
                  redirects: []
                )
                (command.Simple
                  blame_tok: <shift>
                  more_env: []
                  words: [{<shift>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <set>
                  more_env: []
                  words: [
                    {<set>}
                    {<6>}
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name OPTLPENDING>
                          var_name: OPTLPENDING
                          suffix_op: (suffix_op.Unary op:<Id.VOp1_Pound '#'> arg_word:{<-->})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                    {(DQ ($ Id.VSub_At '@'))}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'OPTLPENDING='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLPENDING='> name:OPTLPENDING)
                      op: assign_op.Equal
                      rhs: (rhs_word__Empty)
                    )
                  ]
                  redirects: []
                )
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <eval>
                          more_env: []
                          words: [
                            {<eval>}
                            {(SQ <'set -- "${'>) (DQ ($ Id.VSub_Number 1)) (SQ <'}" "$@"'>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <Id.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {<-n>}
                            {(DQ ($ Id.VSub_Number 1))}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          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: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Number 3>
                                      var_name: 3
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VOp1_DPercent '%%'>
                                          arg_word: {<'='> <Id.Lit_Other '*'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    )
                                  )
                                }
                            )
                          arms_start: <Id.KW_In in>
                          arms: [
                            (CaseArm
                              left: <Id.Left_DoubleQuote '"'>
                              pattern: (pat.Words words:[{(DQ ($ Id.VSub_Number 1))}])
                              middle: <Id.Right_CasePat _>
                              action: [
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'OPTLPENDING='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                                      lhs: 
                                        (sh_lhs_expr.Name
                                          left: <Id.Lit_VarLike 'OPTLPENDING='>
                                          name: OPTLPENDING
                                        )
                                      op: assign_op.Equal
                                      rhs: {<EXACT>}
                                    )
                                  ]
                                  redirects: []
                                )
                                (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:{(DQ ($ Id.VSub_Number 1))})
                          arms_start: <Id.KW_In in>
                          arms: [
                            (CaseArm
                              left: <Id.Left_DoubleQuote '"'>
                              pattern: 
                                (pat.Words
                                  words: [
                                    {
                                      (DQ 
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_Number 3>
                                          var_name: 3
                                          suffix_op: 
                                            (suffix_op.Unary
                                              op: <Id.VOp1_DPercent '%%'>
                                              arg_word: {<'='> <Id.Lit_Other '*'>}
                                            )
                                          right: <Id.Right_DollarBrace '}'>
                                        )
                                      ) <Id.Lit_Star '*'>
                                    }
                                  ]
                                )
                              middle: <Id.Right_CasePat _>
                              action: [
                                (command.If
                                  if_kw: <Id.KW_If if>
                                  arms: [
                                    (IfArm
                                      keyword: <Id.KW_If if>
                                      cond: 
                                        (condition.Shell
                                          commands: [
                                            (command.Sentence
                                              child: 
                                                (command.Simple
                                                  blame_tok: <Id.Lit_LBracket '['>
                                                  more_env: []
                                                  words: [
                                                    {<Id.Lit_LBracket '['>}
                                                    {<-n>}
                                                    {(DQ ($ Id.VSub_DollarName OPTLPENDING))}
                                                    {<Id.Lit_RBracket ']'>}
                                                  ]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              terminator: <Id.Op_Semi _>
                                            )
                                          ]
                                        )
                                      then_kw: <Id.KW_Then then>
                                      action: [
                                        (command.AndOr
                                          children: [
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {(DQ ($ Id.VSub_DollarName OPTLPENDING))}
                                                {<Id.Lit_Equals '='>}
                                                {<AMBIGUOUS>}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                            (command.Simple
                                              blame_tok: <eval>
                                              more_env: []
                                              words: [
                                                {<eval>}
                                                {(SQ <'[ "${'>) 
                                                  (DQ 
                                                    (word_part.ArithSub
                                                      left: <Id.Left_DollarDParen '$(('>
                                                      anode: 
                                                        (arith_expr.Binary
                                                          op_id: Id.Arith_Plus
                                                          left: {($ Id.VSub_DollarName OPTLPENDING)}
                                                          right: {<Id.Lit_Digits 1>}
                                                        )
                                                      right: <Id.Right_DollarDParen _>
                                                    )
                                                  ) (SQ <'}" = "$1" ]'>)
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                            (command.ShAssignment
                                              left: <Id.Lit_VarLike 'OPTLPENDING='>
                                              pairs: [
                                                (AssignPair
                                                  left: <Id.Lit_VarLike 'OPTLPENDING='>
                                                  lhs: 
                                                    (sh_lhs_expr.Name
                                                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                                                      name: OPTLPENDING
                                                    )
                                                  op: assign_op.Equal
                                                  rhs: {<AMBIGUOUS>}
                                                )
                                              ]
                                              redirects: []
                                            )
                                          ]
                                          ops: [<Id.Op_DPipe _> <Id.Op_DPipe _>]
                                        )
                                      ]
                                      spids: [2031 2044]
                                    )
                                  ]
                                  else_kw: <Id.KW_Else else>
                                  else_action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'OPTLPENDING='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'OPTLPENDING='>
                                              name: OPTLPENDING
                                            )
                                          op: assign_op.Equal
                                          rhs: {(DQ ($ Id.VSub_Number 2))}
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  fi_kw: <Id.KW_Fi fi>
                                  redirects: []
                                )
                              ]
                              right: <Id.Op_DSemi _>
                            )
                          ]
                          arms_end: <Id.KW_Esac esac>
                          redirects: []
                        )
                        (command.Simple
                          blame_tok: <eval>
                          more_env: []
                          words: [
                            {<eval>}
                            {
                              (DQ <'shift 2; set '> 
                                (word_part.ArithSub
                                  left: <Id.Left_DollarDParen '$(('>
                                  anode: 
                                    (arith_expr.Binary
                                      op_id: Id.Arith_Plus
                                      left: {($ Id.VSub_Number 2)}
                                      right: {<Id.Lit_Digits 2>}
                                    )
                                  right: <Id.Right_DollarDParen _>
                                ) <' '>
                              ) (SQ <'"$@"'>)
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
                (command.Case
                  case_kw: <Id.KW_Case case>
                  to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName OPTLPENDING))})
                  arms_start: <Id.KW_In in>
                  arms: [
                    (CaseArm
                      left: <AMBIGUOUS>
                      pattern: (pat.Words words:[{<AMBIGUOUS>}])
                      middle: <Id.Right_CasePat _>
                      action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'OPTLERR='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'OPTLERR='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLERR='> name:OPTLERR)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ <'option '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\`'>
                                      ch: '`'
                                    ) <--> 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Number 3>
                                      var_name: 3
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VOp1_DPercent '%%'>
                                          arg_word: {<'='> <Id.Lit_Other '*'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    ) <'\' is ambiguous'>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                        (command.Case
                          case_kw: <Id.KW_Case case>
                          to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 5))})
                          arms_start: <Id.KW_In in>
                          arms: [
                            (CaseArm
                              left: <Id.Lit_Colon ':'>
                              pattern: (pat.Words words:[{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}])
                              middle: <Id.Right_CasePat _>
                              action: [
                                (command.Simple
                                  blame_tok: <eval>
                                  more_env: []
                                  words: [{<eval>} {(DQ ($ Id.VSub_Number 6) <'=:'>)}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'OPTLARG='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'OPTLARG='>
                                      lhs: 
                                        (sh_lhs_expr.Name
                                          left: <Id.Lit_VarLike 'OPTLARG='>
                                          name: OPTLARG
                                        )
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Number 3>
                                              var_name: 3
                                              suffix_op: 
                                                (suffix_op.Unary
                                                  op: <Id.VOp1_DPercent '%%'>
                                                  arg_word: {<'='> <Id.Lit_Other '*'>}
                                                )
                                              right: <Id.Right_DollarBrace '}'>
                                            )
                                          )
                                        }
                                    )
                                  ]
                                  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: <printf>
                                  more_env: []
                                  words: [
                                    {<printf>}
                                    {(SQ <'%s\\n'>)}
                                    {(DQ ($ Id.VSub_DollarName OPTLERR))}
                                  ]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_GreatAnd '>&'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<2>}
                                    )
                                  ]
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <eval>
                                  more_env: []
                                  words: [{<eval>} {(DQ ($ Id.VSub_Number 6) <'=\'?\''>)}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              right: <Id.Op_DSemi _>
                            )
                          ]
                          arms_end: <Id.KW_Esac esac>
                          redirects: []
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'OPTLPENDING='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'OPTLPENDING='>
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'OPTLPENDING='>
                                  name: OPTLPENDING
                                )
                              op: assign_op.Equal
                              rhs: (rhs_word__Empty)
                            )
                          ]
                          redirects: []
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {<0>}
                        )
                      ]
                      right: <Id.Op_DSemi _>
                    )
                    (CaseArm
                      left: <EXACT>
                      pattern: (pat.Words words:[{<EXACT>}])
                      middle: <Id.Right_CasePat _>
                      action: [
                        (command.Simple
                          blame_tok: <eval>
                          more_env: []
                          words: [
                            {<eval>}
                            {(SQ <'set "${'>) 
                              (DQ 
                                (word_part.ArithSub
                                  left: <Id.Left_DollarDParen '$(('>
                                  anode: 
                                    (arith_expr.Binary
                                      op_id: Id.Arith_Plus
                                      left: {($ Id.VSub_Number 2)}
                                      right: {<Id.Lit_Digits 2>}
                                    )
                                  right: <Id.Right_DollarDParen _>
                                )
                              ) (SQ <'}" "$@"'>)
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      right: <Id.Op_DSemi _>
                    )
                    (CaseArm
                      left: <Id.Left_DoubleQuote '"'>
                      pattern: (pat.Words words:[{(DQ )}])
                      middle: <Id.Right_CasePat _>
                      action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'OPTLERR='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'OPTLERR='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLERR='> name:OPTLERR)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ <'bad option: '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\`'>
                                      ch: '`'
                                    ) <--> 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Number 3>
                                      var_name: 3
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VOp1_DPercent '%%'>
                                          arg_word: {<'='> <Id.Lit_Other '*'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    ) <'\''>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                        (command.Case
                          case_kw: <Id.KW_Case case>
                          to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 5))})
                          arms_start: <Id.KW_In in>
                          arms: [
                            (CaseArm
                              left: <Id.Lit_Colon ':'>
                              pattern: (pat.Words words:[{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}])
                              middle: <Id.Right_CasePat _>
                              action: [
                                (command.Simple
                                  blame_tok: <eval>
                                  more_env: []
                                  words: [{<eval>} {(DQ ($ Id.VSub_Number 6) <'=:'>)}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'OPTLARG='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'OPTLARG='>
                                      lhs: 
                                        (sh_lhs_expr.Name
                                          left: <Id.Lit_VarLike 'OPTLARG='>
                                          name: OPTLARG
                                        )
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Number 3>
                                              var_name: 3
                                              suffix_op: 
                                                (suffix_op.Unary
                                                  op: <Id.VOp1_DPercent '%%'>
                                                  arg_word: {<'='> <Id.Lit_Other '*'>}
                                                )
                                              right: <Id.Right_DollarBrace '}'>
                                            )
                                          )
                                        }
                                    )
                                  ]
                                  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: <printf>
                                  more_env: []
                                  words: [
                                    {<printf>}
                                    {(SQ <'%s\\n'>)}
                                    {(DQ ($ Id.VSub_DollarName OPTLERR))}
                                  ]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_GreatAnd '>&'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<2>}
                                    )
                                  ]
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <eval>
                                  more_env: []
                                  words: [{<eval>} {(DQ ($ Id.VSub_Number 6) <'=\'?\''>)}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              right: <Id.Op_DSemi _>
                            )
                          ]
                          arms_end: <Id.KW_Esac esac>
                          redirects: []
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'OPTLPENDING='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'OPTLPENDING='>
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'OPTLPENDING='>
                                  name: OPTLPENDING
                                )
                              op: assign_op.Equal
                              rhs: (rhs_word__Empty)
                            )
                          ]
                          redirects: []
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {<0>}
                        )
                      ]
                      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.Simple
                          blame_tok: <eval>
                          more_env: []
                          words: [
                            {<eval>}
                            {(SQ <'set "${'>) 
                              (DQ 
                                (word_part.ArithSub
                                  left: <Id.Left_DollarDParen '$(('>
                                  anode: 
                                    (arith_expr.Binary
                                      op_id: Id.Arith_Plus
                                      left: {($ Id.VSub_DollarName OPTLPENDING)}
                                      right: {<Id.Lit_Digits 1>}
                                    )
                                  right: <Id.Right_DollarDParen _>
                                )
                              ) (SQ <'}" "${'>) (DQ ($ Id.VSub_DollarName OPTLPENDING)) (SQ <'}" "$@"'>)
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      right: <Id.Op_DSemi _>
                    )
                  ]
                  arms_end: <Id.KW_Esac esac>
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'OPTLPENDING='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'OPTLPENDING='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLPENDING='> name:OPTLPENDING)
                      op: assign_op.Equal
                      rhs: (rhs_word__Empty)
                    )
                  ]
                  redirects: []
                )
                (command.Case
                  case_kw: <Id.KW_Case case>
                  to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 4))})
                  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:{(DQ ($ Id.VSub_Number 1))})
                          arms_start: <Id.KW_In in>
                          arms: [
                            (CaseArm
                              left: <1>
                              pattern: 
                                (pat.Words
                                  words: [{<1>} {<required_argument>} {<2>} {<optional_argument>}]
                                )
                              middle: <Id.Right_CasePat _>
                              action: [
                                (command.Simple
                                  blame_tok: <eval>
                                  more_env: []
                                  words: [
                                    {<eval>}
                                    {
                                      (DQ ($ Id.VSub_Number 7) <'='> 
                                        (word_part.EscapedLiteral
                                          token: <Id.Lit_EscapedChar '\\"'>
                                          ch: '"'
                                        ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <2> 
                                        (word_part.EscapedLiteral
                                          token: <Id.Lit_EscapedChar '\\"'>
                                          ch: '"'
                                        )
                                      )
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'OPTLARG='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'OPTLARG='>
                                      lhs: 
                                        (sh_lhs_expr.Name
                                          left: <Id.Lit_VarLike 'OPTLARG='>
                                          name: OPTLARG
                                        )
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Number 4>
                                              var_name: 4
                                              suffix_op: 
                                                (suffix_op.Unary
                                                  op: <Id.VOp1_Pound '#'>
                                                  arg_word: {<Id.Lit_Other '*'> <'='>}
                                                )
                                              right: <Id.Right_DollarBrace '}'>
                                            )
                                          )
                                        }
                                    )
                                  ]
                                  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 'OPTLERR='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'OPTLERR='>
                                      lhs: 
                                        (sh_lhs_expr.Name
                                          left: <Id.Lit_VarLike 'OPTLERR='>
                                          name: OPTLERR
                                        )
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ <'option '> 
                                            (word_part.EscapedLiteral
                                              token: <Id.Lit_EscapedChar '\\`'>
                                              ch: '`'
                                            ) <--> ($ Id.VSub_Number 2) <'\' doesn\'t allow an argument'>
                                          )
                                        }
                                    )
                                  ]
                                  redirects: []
                                )
                                (command.Case
                                  case_kw: <Id.KW_Case case>
                                  to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 6))})
                                  arms_start: <Id.KW_In in>
                                  arms: [
                                    (CaseArm
                                      left: <Id.Lit_Colon ':'>
                                      pattern: 
                                        (pat.Words
                                          words: [{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}]
                                        )
                                      middle: <Id.Right_CasePat _>
                                      action: [
                                        (command.Simple
                                          blame_tok: <eval>
                                          more_env: []
                                          words: [{<eval>} {(DQ ($ Id.VSub_Number 7) <'=:'>)}]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.ShAssignment
                                          left: <Id.Lit_VarLike 'OPTLARG='>
                                          pairs: [
                                            (AssignPair
                                              left: <Id.Lit_VarLike 'OPTLARG='>
                                              lhs: 
                                                (sh_lhs_expr.Name
                                                  left: <Id.Lit_VarLike 'OPTLARG='>
                                                  name: OPTLARG
                                                )
                                              op: assign_op.Equal
                                              rhs: {(DQ ($ Id.VSub_Number 2))}
                                            )
                                          ]
                                          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: <printf>
                                          more_env: []
                                          words: [
                                            {<printf>}
                                            {(SQ <'%s\\n'>)}
                                            {(DQ ($ Id.VSub_DollarName OPTLERR))}
                                          ]
                                          redirects: [
                                            (Redir
                                              op: <Id.Redir_GreatAnd '>&'>
                                              loc: (redir_loc.Fd fd:1)
                                              arg: {<2>}
                                            )
                                          ]
                                          do_fork: T
                                        )
                                        (command.Simple
                                          blame_tok: <eval>
                                          more_env: []
                                          words: [{<eval>} {(DQ ($ Id.VSub_Number 7) <'=\'?\''>)}]
                                          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: []
                        )
                      ]
                      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:{(DQ ($ Id.VSub_Number 1))})
                          arms_start: <Id.KW_In in>
                          arms: [
                            (CaseArm
                              left: <1>
                              pattern: (pat.Words words:[{<1>} {<required_argument>}])
                              middle: <Id.Right_CasePat _>
                              action: [
                                (command.If
                                  if_kw: <Id.KW_If if>
                                  arms: [
                                    (IfArm
                                      keyword: <Id.KW_If if>
                                      cond: 
                                        (condition.Shell
                                          commands: [
                                            (command.Sentence
                                              child: 
                                                (command.Simple
                                                  blame_tok: <Id.Lit_LBracket '['>
                                                  more_env: []
                                                  words: [
                                                    {<Id.Lit_LBracket '['>}
                                                    {
                                                      (DQ 
                                                        (word_part.ArithSub
                                                          left: <Id.Left_DollarDParen '$(('>
                                                          anode: 
                                                            (arith_expr.Binary
                                                              op_id: Id.Arith_Plus
                                                              left: {($ Id.VSub_Number 5)}
                                                              right: {<Id.Lit_Digits 5>}
                                                            )
                                                          right: <Id.Right_DollarDParen _>
                                                        )
                                                      )
                                                    }
                                                    {<-gt>}
                                                    {(DQ ($ Id.VSub_Pound '#'))}
                                                    {<Id.Lit_RBracket ']'>}
                                                  ]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              terminator: <Id.Op_Semi _>
                                            )
                                          ]
                                        )
                                      then_kw: <Id.KW_Then then>
                                      action: [
                                        (command.ShAssignment
                                          left: <Id.Lit_VarLike 'OPTLERR='>
                                          pairs: [
                                            (AssignPair
                                              left: <Id.Lit_VarLike 'OPTLERR='>
                                              lhs: 
                                                (sh_lhs_expr.Name
                                                  left: <Id.Lit_VarLike 'OPTLERR='>
                                                  name: OPTLERR
                                                )
                                              op: assign_op.Equal
                                              rhs: 
                                                {
                                                  (DQ <'option '> 
                                                    (word_part.EscapedLiteral
                                                      token: <Id.Lit_EscapedChar '\\`'>
                                                      ch: '`'
                                                    ) <--> ($ Id.VSub_Number 2) <'\' requires an argument'>
                                                  )
                                                }
                                            )
                                          ]
                                          redirects: []
                                        )
                                        (command.Case
                                          case_kw: <Id.KW_Case case>
                                          to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 6))})
                                          arms_start: <Id.KW_In in>
                                          arms: [
                                            (CaseArm
                                              left: <Id.Lit_Colon ':'>
                                              pattern: 
                                                (pat.Words
                                                  words: [{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}]
                                                )
                                              middle: <Id.Right_CasePat _>
                                              action: [
                                                (command.Simple
                                                  blame_tok: <eval>
                                                  more_env: []
                                                  words: [{<eval>} {(DQ ($ Id.VSub_Number 7) <'=:'>)}]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                                (command.ShAssignment
                                                  left: <Id.Lit_VarLike 'OPTLARG='>
                                                  pairs: [
                                                    (AssignPair
                                                      left: <Id.Lit_VarLike 'OPTLARG='>
                                                      lhs: 
                                                        (sh_lhs_expr.Name
                                                          left: <Id.Lit_VarLike 'OPTLARG='>
                                                          name: OPTLARG
                                                        )
                                                      op: assign_op.Equal
                                                      rhs: {(DQ ($ Id.VSub_Number 2))}
                                                    )
                                                  ]
                                                  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: <printf>
                                                  more_env: []
                                                  words: [
                                                    {<printf>}
                                                    {(SQ <'%s\\n'>)}
                                                    {(DQ ($ Id.VSub_DollarName OPTLERR))}
                                                  ]
                                                  redirects: [
                                                    (Redir
                                                      op: <Id.Redir_GreatAnd '>&'>
                                                      loc: (redir_loc.Fd fd:1)
                                                      arg: {<2>}
                                                    )
                                                  ]
                                                  do_fork: T
                                                )
                                                (command.Simple
                                                  blame_tok: <eval>
                                                  more_env: []
                                                  words: [
                                                    {<eval>}
                                                    {(DQ ($ Id.VSub_Number 7) <'=\'?\''>)}
                                                  ]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              ]
                                              right: <Id.Op_DSemi _>
                                            )
                                          ]
                                          arms_end: <Id.KW_Esac esac>
                                          redirects: []
                                        )
                                      ]
                                      spids: [2608 2632]
                                    )
                                  ]
                                  else_kw: <Id.KW_Else else>
                                  else_action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'OPTLIND='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'OPTLIND='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'OPTLIND='>
                                              name: OPTLIND
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (word_part.ArithSub
                                                left: <Id.Left_DollarDParen '$(('>
                                                anode: 
                                                  (arith_expr.Binary
                                                    op_id: Id.Arith_Plus
                                                    left: {($ Id.VSub_DollarName OPTLIND)}
                                                    right: {<Id.Lit_Digits 1>}
                                                  )
                                                right: <Id.Right_DollarDParen _>
                                              )
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                    (command.Simple
                                      blame_tok: <eval>
                                      more_env: []
                                      words: [
                                        {<eval>}
                                        {
                                          (DQ <'OPTLARG='> 
                                            (word_part.EscapedLiteral
                                              token: <Id.Lit_EscapedChar '\\"'>
                                              ch: '"'
                                            ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'{'> 
                                            (word_part.ArithSub
                                              left: <Id.Left_DollarDParen '$(('>
                                              anode: 
                                                (arith_expr.Binary
                                                  op_id: Id.Arith_Plus
                                                  left: {($ Id.VSub_Number 5)}
                                                  right: {<Id.Lit_Digits 5>}
                                                )
                                              right: <Id.Right_DollarDParen _>
                                            ) <'}'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"')
                                          )
                                        }
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <eval>
                                      more_env: []
                                      words: [
                                        {<eval>}
                                        {
                                          (DQ ($ Id.VSub_Number 7) <'='> 
                                            (word_part.EscapedLiteral
                                              token: <Id.Lit_EscapedChar '\\"'>
                                              ch: '"'
                                            ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <2> 
                                            (word_part.EscapedLiteral
                                              token: <Id.Lit_EscapedChar '\\"'>
                                              ch: '"'
                                            )
                                          )
                                        }
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  fi_kw: <Id.KW_Fi fi>
                                  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: <eval>
                                  more_env: []
                                  words: [
                                    {<eval>}
                                    {
                                      (DQ ($ Id.VSub_Number 7) <'='> 
                                        (word_part.EscapedLiteral
                                          token: <Id.Lit_EscapedChar '\\"'>
                                          ch: '"'
                                        ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <2> 
                                        (word_part.EscapedLiteral
                                          token: <Id.Lit_EscapedChar '\\"'>
                                          ch: '"'
                                        )
                                      )
                                    }
                                  ]
                                  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: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <Id.Lit_LBracket '['>
                      more_env: []
                      words: [
                        {<Id.Lit_LBracket '['>}
                        {<-n>}
                        {(DQ ($ Id.VSub_DollarName test_getopts_long))}
                        {<Id.Lit_RBracket ']'>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShFunction
              name_tok: <test_getopts_long>
              name: test_getopts_long
              body: 
                (BraceGroup
                  left: <Id.Lit_LBrace '{'>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'expected='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'expected='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expected='> name:expected)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                        )
                        (AssignPair
                          left: <Id.Lit_VarLike 'had='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'had='> name:had)
                          op: assign_op.Equal
                          rhs: (rhs_word__Empty)
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'OPTLIND='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'OPTLIND='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLIND='> name:OPTLIND)
                          op: assign_op.Equal
                          rhs: {<1>}
                        )
                      ]
                      redirects: []
                    )
                    (command.WhileUntil
                      keyword: <Id.KW_While while>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'err='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'err='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'err='> name:err)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (CommandSub
                                          left_token: <Id.Left_DollarParen '$('>
                                          child: 
                                            (command.CommandList
                                              children: [
                                                (command.Sentence
                                                  child: 
                                                    (command.Simple
                                                      blame_tok: <set>
                                                      more_env: []
                                                      words: [{<set>} {<Id.Lit_Other '+'> <x>}]
                                                      redirects: []
                                                      do_fork: T
                                                    )
                                                  terminator: <Id.Op_Semi _>
                                                )
                                                (command.Simple
                                                  blame_tok: <getopts_long>
                                                  more_env: []
                                                  words: [{<getopts_long>} {(DQ ($ Id.VSub_At '@'))}]
                                                  redirects: [
                                                    (Redir
                                                      op: <Id.Redir_GreatAnd '2>&'>
                                                      loc: (redir_loc.Fd fd:2)
                                                      arg: {<1>}
                                                    )
                                                    (Redir
                                                      op: <Id.Redir_Great '>'>
                                                      loc: (redir_loc.Fd fd:1)
                                                      arg: {<'/dev/null'>}
                                                    )
                                                  ]
                                                  do_fork: T
                                                )
                                              ]
                                            )
                                          right: <Id.Eof_RParen _>
                                        )
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Sentence
                              child: 
                                (command.Simple
                                  blame_tok: <getopts_long>
                                  more_env: []
                                  words: [{<getopts_long>} {(DQ ($ Id.VSub_At '@'))}]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_Great '2>'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<'/dev/null'>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      body: 
                        (command.DoGroup
                          left: <Id.KW_Do do>
                          children: [
                            (command.Simple
                              blame_tok: <eval>
                              more_env: []
                              words: [
                                {<eval>}
                                {
                                  (DQ <'opt='> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\"'>
                                      ch: '"'
                                    ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') ($ Id.VSub_Number 2) 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\"'>
                                      ch: '"'
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'had='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'had='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'had='> name:had)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ($ Id.VSub_DollarName had) <'|'> ($ Id.VSub_DollarName opt) 
                                        <'@'> 
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_Name OPTLARG>
                                          var_name: OPTLARG
                                          suffix_op: 
                                            (suffix_op.Unary
                                              op: <Id.VTest_Hyphen _>
                                              arg_word: {<unset>}
                                            )
                                          right: <Id.Right_DollarBrace '}'>
                                        ) <'@'> 
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_Name OPTLIND>
                                          var_name: OPTLIND
                                          suffix_op: 
                                            (suffix_op.Unary
                                              op: <Id.VTest_Hyphen _>
                                              arg_word: {<unset>}
                                            )
                                          right: <Id.Right_DollarBrace '}'>
                                        ) <'@'> 
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_Name OPTLERR>
                                          var_name: OPTLERR
                                          suffix_op: 
                                            (suffix_op.Unary
                                              op: <Id.VTest_Hyphen _>
                                              arg_word: {<unset>}
                                            )
                                          right: <Id.Right_DollarBrace '}'>
                                        ) <'@'> ($ Id.VSub_DollarName err)
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.KW_Done done>
                        )
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'had='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'had='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'had='> name:had)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ($ Id.VSub_DollarName had) <'|'> 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name OPTLIND>
                                  var_name: OPTLIND
                                  suffix_op: 
                                    (suffix_op.Unary
                                      op: <Id.VTest_Hyphen _>
                                      arg_word: {<unset>}
                                    )
                                  right: <Id.Right_DollarBrace '}'>
                                ) <'|'> ($ Id.VSub_DollarName err)
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {(DQ ($ Id.VSub_DollarName had))}
                                        {<Id.Lit_Equals '='>}
                                        {(DQ ($ Id.VSub_DollarName expected))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {<PASS>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [2944 2961]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {<FAIL>}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <printf>
                          more_env: []
                          words: [
                            {<printf>}
                            {(SQ <'Expected: %s\\n     Got: %s\\n'>)}
                            {(DQ ($ Id.VSub_DollarName expected))}
                            {(DQ ($ Id.VSub_DollarName had))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  redirects: []
                  right: <Id.Lit_RBrace '}'>
                )
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          children: [
                            (command.Simple
                              blame_tok: <read>
                              more_env: [(EnvPair left:<Id.Lit_VarLike 'IFS='> name:IFS val:(rhs_word__Empty))]
                              words: [{<read>} {<-r>} {<c>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <read>
                              more_env: [(EnvPair left:<Id.Lit_VarLike 'IFS='> name:IFS val:(rhs_word__Empty))]
                              words: [{<read>} {<-r>} {<e>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: [<Id.Op_DAmp _>]
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <printf>
                      more_env: []
                      words: [{<printf>} {(SQ <'+ %-72s '>)} {(DQ ($ Id.VSub_DollarName c))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <eval>
                      more_env: []
                      words: [
                        {<eval>}
                        {
                          (DQ <'test_getopts_long '> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <e> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) <' '> ($ Id.VSub_DollarName c)
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: 
                        {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'> ch:E) <OF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <': a\n'>
                        <
'|1|getopts_long: long option specifications must end in an empty argument\n'
                        >
                        <':a opt "" -a\n'>
                        <'|a@unset@2@unset@|2|\n'>
                        <':a opt "" -a b\n'>
                        <'|a@unset@2@unset@|2|\n'>
                        <':a opt "" -a -a\n'>
                        <'|a@unset@2@unset@|a@unset@3@unset@|3|\n'>
                        <':a opt "" -ab\n'>
                        <'|a@unset@1@unset@|:@b@2@bad option: `-b\'@|2|\n'>
                        <':a: opt "" -ab\n'>
                        <'|a@b@2@unset@|2|\n'>
                        <':a: opt "" -a b\n'>
                        <'|a@b@3@unset@|3|\n'>
                        <':a: opt "" -a -a\n'>
                        <'|a@-a@3@unset@|3|\n'>
                        <':a: opt "" -a\n'>
                        <'|:@a@2@option `-a\' requires an argument@|2|\n'>
                        <':a:: opt "" -a\n'>
                        <'|a@unset@2@unset@|2|\n'>
                        <':a:: opt "" -ab\n'>
                        <'|a@b@2@unset@|2|\n'>
                        <':a:: opt "" -a b\n'>
                        <'|a@unset@2@unset@|2|\n'>
                        <':ab: opt "" -ab c\n'>
                        <'|a@unset@1@unset@|b@c@3@unset@|3|\n'>
                        <':a:: opt "" -a -a\n'>
                        <'|a@unset@2@unset@|a@unset@3@unset@|3|\n'>
                        <':a:: opt "" -:a:\n'>
                        <'|:@:@1@bad option: `-:\'@|a@:@2@unset@|2|\n'>
                        <':= opt ""\n'>
                        <'|1|\n'>
                        <':: opt ""\n'>
                        <'|1|getopts_long: invalid option specification: `::\'\n'>
                        <': opt ""\n'>
                        <'|1|\n'>
                        <':a:a opt "" -a\n'>
                        <'|:@a@2@option `-a\' requires an argument@|2|\n'>
                        <':a::a opt "" -a\n'>
                        <'|a@unset@2@unset@|2|\n'>
                        <':ab:c:: opt "" -abc -cba -bac\n'>
                        <'|a@unset@1@unset@|b@c@2@unset@|c@ba@3@unset@|b@ac@4@unset@|4|\n'>
                        <': opt abc 0 "" --abc\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <': opt abc no_argument "" --abc\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <': opt abc no_argument "" --abc=foo\n'>
                        <'|:@abc@2@option `--abc\' doesn\'t allow an argument@|2|\n'>
                        <': opt abc no_argument "" --abc foo\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <': opt abc 1 "" --abc=foo\n'>
                        <'|abc@foo@2@unset@|2|\n'>
                        <': opt abc required_argument "" --abc foo\n'>
                        <'|abc@foo@3@unset@|3|\n'>
                        <': opt abc required_argument "" --abc=\n'>
                        <'|abc@@2@unset@|2|\n'>
                        <': opt abc required_argument "" --abc\n'>
                        <'|:@abc@2@option `--abc\' requires an argument@|2|\n'>
                        <': opt abc 2 "" --abc\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <': opt abc optional_argument "" --abc=\n'>
                        <'|abc@@2@unset@|2|\n'>
                        <': opt abc optional_argument "" --abc=foo\n'>
                        <'|abc@foo@2@unset@|2|\n'>
                        <': opt abc optional_argument "" --abc --abc\n'>
                        <'|abc@unset@2@unset@|abc@unset@3@unset@|3|\n'>
                        <': opt abc 0 abcd 0 "" --abc\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <': opt abc 0 abd 0 "" --ab\n'>
                        <'|:@ab@2@option `--ab\' is ambiguous@|2|\n'>
                        <': opt abc 0 abcd 0 "" --ab\n'>
                        <'|:@ab@2@option `--ab\' is ambiguous@|2|\n'>
                        <': opt abc 0 abc 1 "" --ab\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <': opt abc 0 abc 1 "" --abc\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <': opt abc 0 abc 1 "" --ab\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <': opt abc 0 acd 0 "" --ab\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <
':abc:d:e::f:: opt ab 0 ac 1 bc 2 cd 1 cde 2 "" -abcdef -a -f -c --a --a= --b=foo -fg\n'
                        >
                        <
'|a@unset@1@unset@|b@unset@1@unset@|c@def@2@unset@|a@unset@3@unset@|f@unset@4@unset@|c@--a@6@unset@|:@a@7@option `--a\' is ambiguous@|bc@foo@8@unset@|f@g@9@unset@|9|\n'
                        >
                        <'a opt "" -a\n'>
                        <'|a@unset@2@unset@|2|\n'>
                        <'a opt "" -a b\n'>
                        <'|a@unset@2@unset@|2|\n'>
                        <'a opt "" -a -a\n'>
                        <'|a@unset@2@unset@|a@unset@3@unset@|3|\n'>
                        <'a opt "" -ab\n'>
                        <'|a@unset@1@unset@|?@unset@2@bad option: `-b\'@bad option: `-b\'|2|\n'>
                        <'a: opt "" -ab\n'>
                        <'|a@b@2@unset@|2|\n'>
                        <'a: opt "" -a b\n'>
                        <'|a@b@3@unset@|3|\n'>
                        <'a: opt "" -a -a\n'>
                        <'|a@-a@3@unset@|3|\n'>
                        <'a: opt "" -a\n'>
                        <
'|?@unset@2@option `-a\' requires an argument@option `-a\' requires an argument|2|\n'
                        >
                        <'a:: opt "" -a\n'>
                        <'|a@unset@2@unset@|2|\n'>
                        <'a:: opt "" -ab\n'>
                        <'|a@b@2@unset@|2|\n'>
                        <'a:: opt "" -a b\n'>
                        <'|a@unset@2@unset@|2|\n'>
                        <'a:: opt "" -a -a\n'>
                        <'|a@unset@2@unset@|a@unset@3@unset@|3|\n'>
                        <'a:: opt "" -:a:\n'>
                        <'|?@unset@1@bad option: `-:\'@bad option: `-:\'|a@:@2@unset@|2|\n'>
                        <'= opt ""\n'>
                        <'|1|\n'>
                        <': opt ""\n'>
                        <'|1|\n'>
                        <'\'\' opt ""\n'>
                        <'|1|\n'>
                        <'a:a opt "" -a\n'>
                        <
'|?@unset@2@option `-a\' requires an argument@option `-a\' requires an argument|2|\n'
                        >
                        <'a::a opt "" -a\n'>
                        <'|a@unset@2@unset@|2|\n'>
                        <'ab:c:: opt "" -abc -cba -bac\n'>
                        <'|a@unset@1@unset@|b@c@2@unset@|c@ba@3@unset@|b@ac@4@unset@|4|\n'>
                        <'\'\' opt abc 0 "" --abc\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <'\'\' opt abc no_argument "" --abc\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <'\'\' opt abc no_argument "" --abc=foo\n'>
                        <
'|?@unset@2@option `--abc\' doesn\'t allow an argument@option `--abc\' doesn\'t allow an argument|2|\n'
                        >
                        <'\'\' opt abc no_argument "" --abc foo\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <'\'\' opt abc 1 "" --abc=foo\n'>
                        <'|abc@foo@2@unset@|2|\n'>
                        <'\'\' opt abc required_argument "" --abc foo\n'>
                        <'|abc@foo@3@unset@|3|\n'>
                        <'\'\' opt abc required_argument "" --abc=\n'>
                        <'|abc@@2@unset@|2|\n'>
                        <'\'\' opt abc required_argument "" --abc\n'>
                        <
'|?@unset@2@option `--abc\' requires an argument@option `--abc\' requires an argument|2|\n'
                        >
                        <'\'\' opt abc 2 "" --abc\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <'\'\' opt abc optional_argument "" --abc=\n'>
                        <'|abc@@2@unset@|2|\n'>
                        <'\'\' opt abc optional_argument "" --abc=foo\n'>
                        <'|abc@foo@2@unset@|2|\n'>
                        <'\'\' opt abc optional_argument "" --abc --abc\n'>
                        <'|abc@unset@2@unset@|abc@unset@3@unset@|3|\n'>
                        <'\'\' opt abc 0 abcd 0 "" --abc\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <'\'\' opt abc 0 abd 0 "" --ab\n'>
                        <'|?@unset@2@option `--ab\' is ambiguous@option `--ab\' is ambiguous|2|\n'>
                        <'\'\' opt abc 0 abcd 0 "" --ab\n'>
                        <'|?@unset@2@option `--ab\' is ambiguous@option `--ab\' is ambiguous|2|\n'>
                        <'\'\' opt abc 0 abc 1 "" --ab\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <'\'\' opt abc 0 abc 1 "" --abc\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <'\'\' opt abc 0 abc 1 "" --ab\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <'\'\' opt abc 0 acd 0 "" --ab\n'>
                        <'|abc@unset@2@unset@|2|\n'>
                        <
'abc:d:e::f:: opt ab 0 ac 1 bc 2 cd 1 cde 2 "" -abcdef -a -f -c --a --a= --b=foo -fg\n'
                        >
                        <
'|a@unset@1@unset@|b@unset@1@unset@|c@def@2@unset@|a@unset@3@unset@|f@unset@4@unset@|c@--a@6@unset@|?@unset@7@option `--a\' is ambiguous@option `--a\' is ambiguous|bc@foo@8@unset@|f@g@9@unset@|9|\n'
                        >
                        <': \'\' \'\' a\n'>
                        <'|1|getopts_long: invalid variable name: `\'\n'>
                        <': 1a \'\'\n'>
                        <'|1|getopts_long: invalid variable name: `1a\'\n'>
                        <'- a\n'>
                        <'|1|getopts_long: invalid option specification: `-\'\n'>
                        <':a::a:abcd o ab 1 abc 1 abd 1 abe 1 abc 2 \'\' -aa --ab 1 --abc\n'>
                        <
'|a@a@2@unset@|ab@1@4@unset@|:@abc@5@option `--abc\' requires an argument@|5|\n'
                        >
                        <':\n'>
                        <'|1|getopts_long: not enough arguments\n'>
                        <
'\'\\[$\' o -- 0 \' \' 1 \'#\' required_argument \'\' \'-\\\\\\[$\' --\\ =a --\\#=\\$\\$\n'
                        >
                        <
'|\\@unset@1@unset@|\\@unset@1@unset@|\\@unset@1@unset@|[@unset@1@unset@|$@unset@2@unset@| @a@3@unset@|#@$$@4@unset@|4|\n'
                        >
                        <': o a 1 b 2 c\n'>
                        <
'|1|getopts_long: long option specifications must end in an empty argument\n'
                        >
                        <': o a 1 b 2\n'>
                        <
'|1|getopts_long: long option specifications must end in an empty argument\n'
                        >
                        <': o a 1 b 2 c 3 \'\' --c\n'>
                        <'|1|getopts_long: invalid long option type: `3\'\n'>
                        <'":  " o "  " 1 \'\' "-  " "--  =1"\n'>
                        <'| @unset@1@unset@| @unset@2@unset@|  @1@3@unset@|3|\n'>
                        <': o a 1 \'\' --c\n'>
                        <'|:@c@2@bad option: `--c\'@|2|\n'>
                        <': o a 1 \'\' --c=foo\n'>
                        <'|:@c@2@bad option: `--c\'@|2|\n'>
                        <': o ab 1 ac 1 ad 1 a 1 \'\' --a=1\n'>
                        <'|a@1@2@unset@|2|\n'>
                      ]
                    )
                )
              ]
            )
          ]
          spids: [2809 2822]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
  ]
)