(command.CommandList children: [ (command.ShFunction name: READ body: (BraceGroup children:[(C {<read>} {<-u>} {<0>} {<-e>} {<-p>} {(DQ <'user> '>)} {<r>})]) ) (command.ShFunction name: EVAL body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} spids: [39] ) ] ) ] ) ) (command.ShFunction name: PRINT body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} spids: [57] ) ] ) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)] ) body: (command.DoGroup children: [ (C {<READ>}) (C {<EVAL>} {(DQ (${ Id.VSub_Name r))}) (C {<PRINT>} {(DQ (${ Id.VSub_Name r))}) (C {<echo>} {(DQ (${ Id.VSub_Name r))}) ] ) ) ] )