(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_names: [def]
      iterable: (for_iter.Args)
      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: <Id.VSub_Name TMPDIR>
                suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<.>})
              ) <'/gro'> ($ Id.VSub_Dollar '$$') <.tmp>
            }
          spids: [60]
        )
      ]
    )
    (command.Simple
      words: [{<sed>} {<-e>} {(SQ <'s/=/ /'>)}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$t')}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 88
              stdin_parts: [($ Id.VSub_DollarName '$defs') <'\n'>]
            )
        )
      ]
      do_fork: T
    )
    (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:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)