(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_Name __mal_env_included__))}
                    {<Id.Lit_RBracket ']'>}
                  ]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      then_kw: <Id.KW_Then then>
      action: [
        (command.ShAssignment
          left: <Id.Lit_VarLike '__mal_env_included='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike '__mal_env_included='>
              lhs: 
                (sh_lhs_expr.Name
                  left: <Id.Lit_VarLike '__mal_env_included='>
                  name: __mal_env_included
                )
              op: assign_op.Equal
              rhs: {<true>}
            )
          ]
          redirects: []
        )
        (command.Simple
          blame_tok: <source>
          more_env: []
          words: [
            {<source>}
            {
              (CommandSub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Simple
                    blame_tok: <dirname>
                    more_env: []
                    words: [{<dirname>} {($ Id.VSub_Number 0)}]
                    redirects: []
                    do_fork: T
                  )
                right: <Id.Eof_RParen _>
              ) <'/types.sh'>
            }
          ]
          redirects: []
          do_fork: T
        )
        (command.ShFunction
          name_tok: <ENV>
          name: ENV
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'r='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'r='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                      op: assign_op.Equal
                      rhs: (rhs_word__Empty)
                    )
                  ]
                  redirects: []
                )
                (command.Simple
                  blame_tok: <_hash_map>
                  more_env: []
                  words: [{<_hash_map>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Name r))}]
                  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.DBracket
                                  left: <Id.KW_DLeftBracket '[['>
                                  expr: (bool_expr.WordTest w:{(DQ (${ Id.VSub_Number 1))})
                                  right: <Id.Lit_DRightBracket ']]'>
                                  redirects: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.Sentence
                          child: 
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'outer='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'outer='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'outer='> name:outer)
                                  op: assign_op.Equal
                                  rhs: {(DQ (${ Id.VSub_Number 1))}
                                )
                              ]
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                        (command.Simple
                          blame_tok: <shift>
                          more_env: []
                          words: [{<shift>}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <_assoc>
                          more_env: []
                          words: [
                            {<_assoc> <Id.KW_Bang '!'>}
                            {(DQ (${ Id.VSub_Name env))}
                            {(DQ <__outer__>)}
                            {(DQ (${ Id.VSub_Name outer))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      spids: [71 84]
                    )
                  ]
                  else_kw: <Id.KW_Else else>
                  else_action: [
                    (command.Simple
                      blame_tok: <_assoc>
                      more_env: []
                      words: [
                        {<_assoc> <Id.KW_Bang '!'>}
                        {(DQ (${ Id.VSub_Name env))}
                        {(DQ <__outer__>)}
                        {(DQ (${ Id.VSub_Name __nil))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'r='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'r='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                      op: assign_op.Equal
                      rhs: {(DQ (${ Id.VSub_Name env))}
                    )
                  ]
                  redirects: []
                )
                (command.If
                  if_kw: <Id.KW_If if>
                  arms: [
                    (IfArm
                      keyword: <Id.KW_If if>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  left: <Id.KW_DLeftBracket '[['>
                                  expr: 
                                    (bool_expr.LogicalAnd
                                      left: (bool_expr.WordTest w:{(DQ (${ Id.VSub_Number 1))})
                                      right: (bool_expr.WordTest w:{(DQ (${ Id.VSub_At '@'))})
                                    )
                                  right: <Id.Lit_DRightBracket ']]'>
                                  redirects: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <local>
                              more_env: []
                              words: [
                                {<local>}
                                {<Id.Lit_VarLike 'binds='> 
                                  (ShArrayLiteral
                                    left: <Id.Op_LParen _>
                                    words: [
                                      {
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_Name ANON>
                                          var_name: ANON
                                          bracket_op: 
                                            (bracket_op.ArrayIndex
                                              expr: {(DQ (${ Id.VSub_Number 1))}
                                            )
                                          right: <Id.Right_DollarBrace '}'>
                                        )
                                      }
                                    ]
                                    right: <Id.Right_ShArrayLiteral _>
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                        (command.Simple
                          blame_tok: <shift>
                          more_env: []
                          words: [{<shift>}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <local>
                          more_env: []
                          words: [{<local>} {<Id.Lit_VarLike 'idx='> <0>}]
                          redirects: []
                          do_fork: T
                        )
                        (command.WhileUntil
                          keyword: <Id.KW_While while>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      left: <Id.KW_DLeftBracket '[['>
                                      expr: 
                                        (bool_expr.WordTest
                                          w: 
                                            {
                                              (DQ 
                                                (BracedVarSub
                                                  left: <Id.Left_DollarBrace '${'>
                                                  token: <Id.VSub_Name binds>
                                                  var_name: binds
                                                  bracket_op: 
                                                    (bracket_op.ArrayIndex
                                                      expr: {(DQ (${ Id.VSub_Name idx))}
                                                    )
                                                  right: <Id.Right_DollarBrace '}'>
                                                )
                                              )
                                            }
                                        )
                                      right: <Id.Lit_DRightBracket ']]'>
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          body: 
                            (command.DoGroup
                              left: <Id.KW_Do do>
                              children: [
                                (command.Simple
                                  blame_tok: <local>
                                  more_env: []
                                  words: [
                                    {<local>}
                                    {<Id.Lit_VarLike 'fp='> 
                                      (DQ 
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_Name ANON>
                                          var_name: ANON
                                          bracket_op: 
                                            (bracket_op.ArrayIndex
                                              expr: 
                                                {
                                                  (DQ 
                                                    (BracedVarSub
                                                      left: <Id.Left_DollarBrace '${'>
                                                      token: <Id.VSub_Name binds>
                                                      var_name: binds
                                                      bracket_op: 
                                                        (bracket_op.ArrayIndex
                                                          expr: {(DQ (${ Id.VSub_Name idx))}
                                                        )
                                                      right: <Id.Right_DollarBrace '}'>
                                                    )
                                                  )
                                                }
                                            )
                                          right: <Id.Right_DollarBrace '}'>
                                        )
                                      )
                                    }
                                  ]
                                  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.DBracket
                                                  left: <Id.KW_DLeftBracket '[['>
                                                  expr: 
                                                    (bool_expr.Binary
                                                      op_id: Id.BoolBinary_GlobDEqual
                                                      left: {(DQ (${ Id.VSub_Name fp))}
                                                      right: {(DQ <'&'>)}
                                                    )
                                                  right: <Id.Lit_DRightBracket ']]'>
                                                  redirects: []
                                                )
                                              terminator: <Id.Op_Semi _>
                                            )
                                          ]
                                        )
                                      then_kw: <Id.KW_Then then>
                                      action: [
                                        (command.ShAssignment
                                          left: <Id.Lit_VarLike 'idx='>
                                          pairs: [
                                            (AssignPair
                                              left: <Id.Lit_VarLike 'idx='>
                                              lhs: 
                                                (sh_lhs_expr.Name
                                                  left: <Id.Lit_VarLike 'idx='>
                                                  name: idx
                                                )
                                              op: assign_op.Equal
                                              rhs: 
                                                {
                                                  (word_part.ArithSub
                                                    left: <Id.Left_DollarDParen '$(('>
                                                    anode: 
                                                      (arith_expr.Binary
                                                        op_id: Id.Arith_Plus
                                                        left: ($ Id.Lit_ArithVarLike idx)
                                                        right: {<Id.Lit_Digits 1>}
                                                      )
                                                    right: <Id.Right_DollarDParen _>
                                                  )
                                                }
                                            )
                                          ]
                                          redirects: []
                                        )
                                        (command.ShAssignment
                                          left: <Id.Lit_VarLike 'fp='>
                                          pairs: [
                                            (AssignPair
                                              left: <Id.Lit_VarLike 'fp='>
                                              lhs: 
                                                (sh_lhs_expr.Name
                                                  left: <Id.Lit_VarLike 'fp='>
                                                  name: fp
                                                )
                                              op: assign_op.Equal
                                              rhs: 
                                                {
                                                  (DQ 
                                                    (BracedVarSub
                                                      left: <Id.Left_DollarBrace '${'>
                                                      token: <Id.VSub_Name ANON>
                                                      var_name: ANON
                                                      bracket_op: 
                                                        (bracket_op.ArrayIndex
                                                          expr: 
                                                            {
                                                              (DQ 
                                                                (BracedVarSub
                                                                  left: <Id.Left_DollarBrace '${'>
                                                                  token: <Id.VSub_Name binds>
                                                                  var_name: binds
                                                                  bracket_op: 
                                                                    (bracket_op.ArrayIndex
                                                                      expr: 
                                                                        {(DQ (${ Id.VSub_Name idx))}
                                                                    )
                                                                  right: <Id.Right_DollarBrace '}'>
                                                                )
                                                              )
                                                            }
                                                        )
                                                      right: <Id.Right_DollarBrace '}'>
                                                    )
                                                  )
                                                }
                                            )
                                          ]
                                          redirects: []
                                        )
                                        (command.Simple
                                          blame_tok: <_list>
                                          more_env: []
                                          words: [{<_list>} {(DQ (${ Id.VSub_At '@'))}]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.Simple
                                          blame_tok: <_assoc>
                                          more_env: []
                                          words: [
                                            {<_assoc> <Id.KW_Bang '!'>}
                                            {(DQ (${ Id.VSub_Name env))}
                                            {(DQ (${ Id.VSub_Name fp))}
                                            {(DQ (${ Id.VSub_Name r))}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.ControlFlow
                                          keyword: <Id.ControlFlow_Break break>
                                        )
                                      ]
                                      spids: [250 269]
                                    )
                                  ]
                                  else_kw: <Id.KW_Else else>
                                  else_action: [
                                    (command.Simple
                                      blame_tok: <_assoc>
                                      more_env: []
                                      words: [
                                        {<_assoc> <Id.KW_Bang '!'>}
                                        {(DQ (${ Id.VSub_Name env))}
                                        {(DQ (${ Id.VSub_Name fp))}
                                        {(DQ (${ Id.VSub_Number 1))}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <shift>
                                      more_env: []
                                      words: [{<shift>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'idx='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'idx='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'idx='>
                                              name: idx
                                            )
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (word_part.ArithSub
                                                left: <Id.Left_DollarDParen '$(('>
                                                anode: 
                                                  (arith_expr.Binary
                                                    op_id: Id.Arith_Plus
                                                    left: ($ Id.Lit_ArithVarLike idx)
                                                    right: {<Id.Lit_Digits 1>}
                                                  )
                                                right: <Id.Right_DollarDParen _>
                                              )
                                            }
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  fi_kw: <Id.KW_Fi fi>
                                  redirects: []
                                )
                              ]
                              right: <Id.KW_Done done>
                            )
                          redirects: []
                        )
                      ]
                      spids: [153 174]
                    )
                  ]
                  else_action: []
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'r='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'r='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                      op: assign_op.Equal
                      rhs: {(DQ (${ Id.VSub_Name env))}
                    )
                  ]
                  redirects: []
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <ENV_FIND>
          name: ENV_FIND
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (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: <_contains>
                                  more_env: []
                                  words: [
                                    {<_contains> <Id.Lit_QMark '?'>}
                                    {(DQ (${ Id.VSub_Number 1))}
                                    {
                                      (DQ 
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_Name ANON>
                                          var_name: ANON
                                          bracket_op: 
                                            (bracket_op.ArrayIndex
                                              expr: {(DQ (${ Id.VSub_Number 2))}
                                            )
                                          right: <Id.Right_DollarBrace '}'>
                                        )
                                      )
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'r='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'r='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                              op: assign_op.Equal
                              rhs: {(DQ (${ Id.VSub_Number 1))}
                            )
                          ]
                          redirects: []
                        )
                      ]
                      spids: [412 437]
                    )
                  ]
                  else_kw: <Id.KW_Else else>
                  else_action: [
                    (command.Simple
                      blame_tok: <local>
                      more_env: []
                      words: [
                        {<local>}
                        {<Id.Lit_VarLike 'obj='> 
                          (DQ 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name ANON>
                              var_name: ANON
                              bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                              right: <Id.Right_DollarBrace '}'>
                            )
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <eval>
                      more_env: []
                      words: [
                        {<eval>}
                        {<local>}
                        {<Id.Lit_VarLike 'outer='> 
                          (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'{'> 
                            (${ Id.VSub_Name obj) <'['>
                          ) <__outer__> (DQ <']}'>)
                        }
                      ]
                      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.DBracket
                                      left: <Id.KW_DLeftBracket '[['>
                                      expr: 
                                        (bool_expr.LogicalAnd
                                          left: (bool_expr.WordTest w:{(DQ (${ Id.VSub_Name outer))})
                                          right: 
                                            (bool_expr.Binary
                                              op_id: Id.BoolBinary_GlobNEqual
                                              left: {(DQ (${ Id.VSub_Name outer))}
                                              right: {(DQ (${ Id.VSub_Name __nil))}
                                            )
                                        )
                                      right: <Id.Lit_DRightBracket ']]'>
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <ENV_FIND>
                              more_env: []
                              words: [
                                {<ENV_FIND>}
                                {(DQ (${ Id.VSub_Name outer))}
                                {(DQ (${ Id.VSub_Number 2))}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [487 516]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'r='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'r='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                              op: assign_op.Equal
                              rhs: (rhs_word__Empty)
                            )
                          ]
                          redirects: []
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <ENV_GET>
          name: ENV_GET
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <ENV_FIND>
                  more_env: []
                  words: [{<ENV_FIND>} {(DQ (${ Id.VSub_Number 1))} {(DQ (${ Id.VSub_Number 2))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Name r))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [
                    {<local>}
                    {<Id.Lit_VarLike 'key='> 
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name ANON>
                          var_name: ANON
                          bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 2))})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                  ]
                  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.DBracket
                                  left: <Id.KW_DLeftBracket '[['>
                                  expr: (bool_expr.WordTest w:{(DQ (${ Id.VSub_Name r))})
                                  right: <Id.Lit_DRightBracket ']]'>
                                  redirects: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.Simple
                          blame_tok: <local>
                          more_env: []
                          words: [
                            {<local>}
                            {<Id.Lit_VarLike 'obj='> 
                              (DQ 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name ANON>
                                  var_name: ANON
                                  bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Name env))})
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <eval>
                          more_env: []
                          words: [
                            {<eval>}
                            {<Id.Lit_VarLike 'r='> 
                              (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') 
                                <'{'> (${ Id.VSub_Name obj) <'['>
                              ) (${ Id.VSub_Name key) (DQ <']}'>)
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      spids: [607 620]
                    )
                  ]
                  else_kw: <Id.KW_Else else>
                  else_action: [
                    (command.Simple
                      blame_tok: <_error>
                      more_env: []
                      words: [{<_error>} {(DQ <'\''> (${ Id.VSub_Name key) <'\' not found'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <ENV_SET>
          name: ENV_SET
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [
                    {<local>}
                    {<Id.Lit_VarLike 'key='> 
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name ANON>
                          var_name: ANON
                          bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 2))})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <_assoc>
                  more_env: []
                  words: [
                    {<_assoc> <Id.KW_Bang '!'>}
                    {(DQ (${ Id.VSub_Number 1))}
                    {(DQ (${ Id.VSub_Name key))}
                    {(DQ (${ Id.VSub_Number 3))}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
      ]
      spids: [10 25]
    )
  ]
  else_action: []
  fi_kw: <Id.KW_Fi fi>
  redirects: []
)