(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_Declare
      flags: [-a]
      pairs: [(assign_pair lhs:(lhs_expr.LhsName name:__atexit_cmds spids:[15]) op:Equal spids:[15])]
      spids: [11]
    )
    (command.FuncDef
      name: __atexit
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: cmd
              iter_words: [
                {
                  (DQ 
                    (word_part.BracedVarSub
                      token: <VSub_Name __atexit_cmds>
                      bracket_op: (bracket_op.WholeArray op_id:Lit_At)
                      spids: [35 40]
                    )
                  )
                }
              ]
              do_arg_iter: F
              body: (command.DoGroup children:[(C {(eval)} {(${ VSub_Name cmd)})] spids:[44 54])
              spids: [33 42]
            )
          ]
          spids: [25]
        )
      spids: [21 24]
    )
    (command.FuncDef
      name: atexit
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:length spids:[75])
                  op: Equal
                  rhs: 
                    {
                      (word_part.BracedVarSub
                        token: <VSub_Name __atexit_cmds>
                        prefix_op: VSub_Pound
                        bracket_op: (bracket_op.WholeArray op_id:Arith_Star)
                        spids: [76 82]
                      )
                    }
                  spids: [75]
                )
              ]
              spids: [73]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: 
                    (lhs_expr.LhsIndexedName
                      name: __atexit_cmds
                      index: (arith_expr.ArithWord w:{(${ VSub_Name length)})
                      spids: [90]
                    )
                  op: Equal
                  rhs: {(DQ (${ VSub_Star '*'))}
                  spids: [90]
                )
              ]
              spids: [90]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.BoolBinary
                              op_id: BoolBinary_eq
                              left: {(${ VSub_Name length)}
                              right: {(0)}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(trap)} {(__atexit)} {(EXIT)})]
                  spids: [16777215 122]
                )
              ]
              spids: [16777215 132]
            )
          ]
          spids: [66]
        )
      spids: [62 65]
    )
  ]
)