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