(command.CommandList children: [ (command.ShFunction name_tok: <READ> name: READ body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<-u>} {<0>} {<-e>} {<-p>} {(DQ <'user> '>)} {<r>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <EVAL> name: EVAL body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'r='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'r='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} ) ] redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <PRINT> name: PRINT body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'r='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'r='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} ) ] redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <READ> more_env: [] words: [{<READ>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <EVAL> more_env: [] words: [{<EVAL>} {(DQ (${ Id.VSub_Name r))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <PRINT> more_env: [] words: [{<PRINT>} {(DQ (${ Id.VSub_Name r))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name r))}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) ] )