(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)}) ] )