(command.CommandList children: [ (C {<.>} { (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash /> <'*'>}) ) </test.sh> } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:value) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [{<../lishp.sh>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 28 stdin_parts: [<'(let* ((x 2))\n'> <' x)\n'>] ) ] ) ] ) ) } spids: [18] ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Integer :: 2'>)} {(DQ (${ Id.VSub_Name value))} {(DQ <'Basic let*'>)} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:value) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [{<../lishp.sh>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 65 stdin_parts: [<'(let* ((x 2)\n'> <' (y x))\n'> <' y)\n'>] ) ] ) ] ) ) } spids: [54] ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Integer :: 2'>)} {(DQ (${ Id.VSub_Name value))} {(DQ <'let* reading previous values'>)} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:value) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [{<../lishp.sh>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 102 stdin_parts: [<'(let* ((x 2))\n'> <' x\n'> <' (* 5 x))\n'>] ) ] ) ] ) ) } spids: [91] ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Integer :: 10'>)} {(DQ (${ Id.VSub_Name value))} {(DQ <'let returning last value'>)} ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <report>}) ] )