(command.CommandList children: [ (command.FuncDef name: update_method body: (command.BraceGroup children:[(command.ControlFlow token:<ControlFlow_Return return>)]) ) (command.FuncDef name: update_this_script body: (command.BraceGroup children: [ (command.Assignment pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:old_md5) op: Equal rhs: { (word_part.CommandSub left_token: <Left_Backtick '`'> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(md5sum)} {($ VSub_Number '$0')}) (C {(cut)} {(-d) (SQ <' '>)} {(-f1)}) ] negated: F ) ] ) ) } ) ] ) (C {(update_method)}) (command.Assignment pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:new_md5) op: Equal rhs: { (word_part.CommandSub left_token: <Left_Backtick '`'> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(md5sum)} {($ VSub_Number '$0')}) (C {(cut)} {(-d) (SQ <' '>)} {(-f1)}) ] negated: F ) ] ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_LBracket '[')} {(DQ ($ VSub_DollarName '$old_md5'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_DollarName '$new_md5'))} {(Lit_RBracket ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(exec)} {($ VSub_Number '$0')} {(DQ ($ VSub_At '$@'))})] ) ] ) ] ) ) (C {(update_this_script)}) (C {(echo)} {(DQ ('rest of script here'))}) ] )