(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PERMS)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [14]
        )
      ]
    )
    (C {(shift)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ARGS)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [20]
        )
      ]
    )
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:24)
      cond: [
        (command.Sentence
          child: 
            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(1)} {(Id.Lit_RBracket ']')})
          terminator: (Token id:Id.Op_Semi val:';' span_id:35)
        )
      ]
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ARGS)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$ARGS') (' ') ($ Id.VSub_Number '$1'))}
                  spids: [40]
                )
              ]
            )
            (C {(shift)})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DEST)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [52]
        )
      ]
    )
    (command.ForEach
      iter_name: SRC
      iter_words: [{($ Id.VSub_DollarName '$ARGS')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(cp)} {(-a)} {($ Id.VSub_DollarName '$SRC')} {($ Id.VSub_DollarName '$DEST')})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ ($ Id.VSub_DollarName '$DEST'))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:89)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:DESTFILE)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ($ Id.VSub_DollarName '$DEST') (/) 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:98)
                                  command_list: 
                                    (command.CommandList
                                      children: [(C {(basename)} {(DQ ($ Id.VSub_DollarName '$SRC'))})]
                                    )
                                )
                              )
                            }
                          spids: [94]
                        )
                      ]
                    )
                  ]
                  spids: [78 91]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:DESTFILE)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_DollarName '$DEST'))}
                      spids: [111]
                    )
                  ]
                )
              ]
            )
            (command.Simple
              words: [{(chmod)} {($ Id.VSub_DollarName '$PERMS')} {($ Id.VSub_DollarName '$DESTFILE')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'2>' span_id:135)
                  fd: 2
                  arg_word: {(/dev/null)}
                )
              ]
            )
          ]
        )
    )
    (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:141) arg_word:{(0)})
  ]
)