(command.CommandList children: [ (command.ShFunction name: update_method body: (command.BraceGroup children: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:28) ) ] ) ) (command.ShFunction name: update_this_script body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:old_md5) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:49) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(md5sum)} {($ Id.VSub_Number '$0')}) (C {(cut)} {(-d) (SQ (Token id:Id.Lit_Chars val:' ' span_id:62))} {(-f1)} ) ] negated: F ) ] ) ) } spids: [48] ) ] ) (C {(update_method)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:new_md5) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:73) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(md5sum)} {($ Id.VSub_Number '$0')}) (C {(cut)} {(-d) (SQ (Token id:Id.Lit_Chars val:' ' span_id:86))} {(-f1)} ) ] negated: F ) ] ) ) } spids: [72] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$old_md5'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$new_md5'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:109) ) ] action: [(C {(exec)} {($ Id.VSub_Number '$0')} {(DQ ($ Id.VSub_At '$@'))})] spids: [93 111] ) ] ) ] ) ) (C {(update_this_script)}) (C {(echo)} {(DQ ('rest of script here'))}) ] )