(CommandList children: [ (FuncDef name: update_method body: (BraceGroup children:[(ControlFlow token:<ControlFlow_Return return>)] spids:[25]) spids: [21 24] ) (FuncDef name: update_this_script body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:old_md5) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(md5sum)} {($ VSub_Number '$0')}) (C {(cut)} {(-d) (SQ <' '>)} {(-f1)}) ] negated: False ) ] ) left_token: <Left_Backtick '`'> spids: [49 64] ) } spids: [48] ) ] spids: [48] ) (C {(update_method)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:new_md5) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(md5sum)} {($ VSub_Number '$0')}) (C {(cut)} {(-d) (SQ <' '>)} {(-f1)}) ] negated: False ) ] ) left_token: <Left_Backtick '`'> spids: [71 86] ) } spids: [70] ) ] spids: [70] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$old_md5'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Name '$new_md5'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(exec)} {($ VSub_Number '$0')} {(DQ ($ VSub_At '$@'))})] spids: [-1 107] ) ] spids: [-1 119] ) ] spids: [45] ) spids: [41 44] ) (C {(update_this_script)}) (C {(echo)} {(DQ ('rest of script here'))}) ] )