(command.CommandList children: [ (command.ShFunction name: update_method body: (BraceGroup children:[(command.ControlFlow token:<Id.ControlFlow_Return return>)]) ) (command.ShFunction name: update_this_script body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:old_md5) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<md5sum>} {($ Id.VSub_Number '$0')}) (C {<cut>} {<-d> (SQ <' '>)} {<-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: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<md5sum>} {($ Id.VSub_Number '$0')}) (C {<cut>} {<-d> (SQ <' '>)} {<-f1>}) ] negated: F ) ) } spids: [72] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: <Id.Op_Semi _> ) ] ) 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'>)}) ] )