(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:file)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [16]
        )
      ]
    )
    (C {(shift)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:defs)
          op: assign_op.Equal
          rhs: {(DQ ('#define ') ($ Id.VSub_Number '$1'))}
          spids: [22]
        )
      ]
    )
    (C {(shift)})
    (command.ForEach
      iter_name: def
      do_arg_iter: T
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:defs)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$defs') ('\n') ('#define ') 
                        ($ Id.VSub_DollarName '$def')
                      )
                    }
                  spids: [37]
                )
              ]
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:t)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:TMPDIR span_id:62)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{(.)})
              ) (/gro) ($ Id.VSub_Dollar '$$') (.tmp)
            }
          spids: [60]
        )
      ]
    )
    (command.Simple
      words: [{(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/=/ /' span_id:76))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:79)
          fd: -1
          arg_word: {($ Id.VSub_DollarName '$t')}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:82)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 88
          stdin_parts: [($ Id.VSub_DollarName '$defs') ('\n')]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DPipe]
      children: [
        (C {(test)} {(-r)} {($ Id.VSub_DollarName '$file')})
        (C {(cmp)} {(-s)} {($ Id.VSub_DollarName '$t')} {($ Id.VSub_DollarName '$file')})
        (C {(cp)} {($ Id.VSub_DollarName '$t')} {($ Id.VSub_DollarName '$file')})
      ]
    )
    (C {(rm)} {(-f)} {($ Id.VSub_DollarName '$t')})
    (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:122) arg_word:{(0)})
  ]
)