(command.CommandList children: [ (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [ {<Id.Lit_Colon ':'>} { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name TEST_SH> var_name: TEST_SH suffix_op: (suffix_op.Unary op:<Id.VTest_ColonEquals _> arg_word:{(DQ <'/bin/sh'>)}) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'nl='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'nl='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nl='> name:nl) op: assign_op.Equal rhs: {(SQ <'\n'>)} ) ] redirects: [] ) (command.ShFunction name_tok: <reset> name: reset body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'TEST_NUM='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TEST_NUM='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEST_NUM='> name:TEST_NUM) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TEST_FAILURES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TEST_FAILURES='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEST_FAILURES='> name:TEST_FAILURES) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='> name: TEST_FAIL_COUNT ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TEST_ID='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TEST_ID='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEST_ID='> name:TEST_ID) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <check> name: check body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'fail='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'fail='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fail='> name:fail) op: assign_op.Equal rhs: {<false>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TEMP_FILE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TEMP_FILE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEMP_FILE='> name:TEMP_FILE) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <mktemp> more_env: [] words: [{<mktemp>} {<OUT.XXXXXX>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TEST_NUM='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TEST_NUM='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEST_NUM='> name:TEST_NUM) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName TEST_NUM)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'CMD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'CMD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CMD='> name:CMD) op: assign_op.Equal rhs: {(DQ <'nl=\''> (${ Id.VSub_Name nl) <'\'; '> ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'result='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'result='> name:result) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <Id.Left_DollarBrace '${'> more_env: [] words: [{(${ Id.VSub_Name TEST_SH)} {<-c>} {(DQ (${ Id.VSub_Name CMD))}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {(DQ (${ Id.VSub_Name TEMP_FILE))} ) ] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'STATUS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'STATUS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'STATUS='> name:STATUS) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name STATUS))} {<-ne>} {(DQ ($ Id.VSub_Number 3))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'['> ($ Id.VSub_DollarName TEST_NUM) <'] expected exit code '> ($ Id.VSub_Number 3) <', got '> (${ Id.VSub_Name STATUS) ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: {(DQ ($ Id.VSub_Number 3) <'/'> (${ Id.VSub_Name STATUS))} ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words: [{<Id.Lit_Star '*'> <'/0'>} {<'0/'> <Id.Lit_Star '*'>}] ) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'fail='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'fail='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fail='> name:fail) op: assign_op.Equal rhs: {<true>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [213 232] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 3))} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-s>} {(DQ (${ Id.VSub_Name TEMP_FILE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'['> ($ Id.VSub_DollarName TEST_NUM) <'] Messages produced on stderr unexpected...'> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(DQ (${ Id.VSub_Name TEMP_FILE))}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'fail='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'fail='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fail='> name:fail) op: assign_op.Equal rhs: {<true>} ) ] redirects: [] ) ] spids: [312 327] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [294 309] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-s>} {(DQ (${ Id.VSub_Name TEMP_FILE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'['> ($ Id.VSub_DollarName TEST_NUM) <'] Expected messages on stderr, nothing produced'> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'fail='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'fail='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fail='> name:fail) op: assign_op.Equal rhs: {<true>} ) ] redirects: [] ) ] spids: [366 383] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ (${ Id.VSub_Name TEMP_FILE))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'oifs='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'oifs='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'oifs='> name:oifs) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName IFS))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'IFS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'IFS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IFS='> name:IFS) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName nl))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'result='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'result='> name:result) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName result)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'IFS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'IFS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IFS='> name:IFS) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName oifs))} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName result))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'['> ($ Id.VSub_DollarName TEST_NUM) <'] Expected output \''> ($ Id.VSub_Number 2) <'\', received \''> ($ Id.VSub_DollarName result) <'\''> ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'fail='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'fail='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fail='> name:fail) op: assign_op.Equal rhs: {<true>} ) ] redirects: [] ) ] spids: [454 472] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.VSub_DollarName '$fail'> more_env: [] words: [{($ Id.VSub_DollarName fail)}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'['> ($ Id.VSub_DollarName TEST_NUM) <'] Full command: <<'> (${ Id.VSub_Name CMD) <'>>'> ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] spids: [499 504] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.VSub_DollarName '$fail'> more_env: [] words: [{($ Id.VSub_DollarName fail)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-n>} {(DQ ($ Id.VSub_DollarName TEST_ID))}] redirects: [] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'TEST_FAILURES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TEST_FAILURES='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TEST_FAILURES='> name: TEST_FAILURES ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name TEST_FAILURES) (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name TEST_FAILURES> var_name: TEST_FAILURES suffix_op: (suffix_op.Unary op: <Id.VTest_ColonPlus _> arg_word: {<'\n'>} ) right: <Id.Right_DollarBrace '}'> ) (${ Id.VSub_Name TEST_ID) <'['> ($ Id.VSub_DollarName TEST_NUM) <']: test of \''> ($ Id.VSub_Number 1) <'\' failed'> ) } ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='> name: TEST_FAIL_COUNT ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName TEST_FAIL_COUNT)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.VSub_DollarName '$fail'> more_env: [] words: [{($ Id.VSub_DollarName fail)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'Test['> ($ Id.VSub_DollarName TEST_NUM) <'] of \''> ($ Id.VSub_Number 1) <'\' failed'> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <results> name: results body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-z>} {(DQ (${ Id.VSub_Name TEST_ID))}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-z>} {(DQ (${ Id.VSub_Name TEST_FAILURES))}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'=========================================='>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'While testing \''> (${ Id.VSub_Name TEST_ID) <'\''>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' - - - - - - - - - - - - - - - - -'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name TEST_FAILURES))}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <atf_fail> more_env: [] words: [ {<atf_fail>} { (DQ <'Test '> (${ Id.VSub_Name TEST_ID) <': '> ($ Id.VSub_DollarName TEST_FAIL_COUNT) <' subtests (of '> ($ Id.VSub_DollarName TEST_NUM) <') failed - see stderr'> ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<do_simple>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <do_simple_head> name: do_simple_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Basic tests for here documents'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <do_simple_body> name: do_simple_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'y='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'y='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'y='> name:y) op: assign_op.Equal rhs: {<x>} ) ] redirects: [] ) (command.Simple blame_tok: <reset> more_env: [] words: [{<reset>} {(SQ <simple>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'IFS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'IFS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IFS='> name:IFS) op: assign_op.Equal rhs: {(SQ <' \t'>)} ) ] redirects: [] ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=`cat <<EOF'>) ($ Id.VSub_DollarName nl) (SQ <text>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>) } {(SQ <text>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=`cat <<\\EOF'>) ($ Id.VSub_DollarName nl) (SQ <text>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>) } {(SQ <text>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<EOF'>) ($ Id.VSub_DollarName nl) (SQ <'te${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>) } {(SQ <text>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<\\EOF'>) ($ Id.VSub_DollarName nl) (SQ <'te${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>) } {(SQ <'te${y}t'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<"EOF"'>) ($ Id.VSub_DollarName nl) (SQ <'te${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>) } {(SQ <'te${y}t'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<'>) (DQ <'\'EOF\''>) ($ Id.VSub_DollarName nl) (SQ <'te${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>) } {(SQ <'te${y}t'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (DQ <'cat <<EOF'> (${ Id.VSub_Name nl) <'te\'xt'> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) ) } {(DQ <'te\'xt'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (DQ <'cat <<'> <Id.Lit_BadBackslash '\\'> <EOF> (${ Id.VSub_Name nl) <'te\'xt'> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) ) } {(DQ <'te\'xt'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (DQ <'cat <<\'EOF\''> (${ Id.VSub_Name nl) <'te\'xt'> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) ) } {(DQ <'te\'xt'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (DQ <'cat <<EOF'> (${ Id.VSub_Name nl) <te> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <xt> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) ) } {(SQ <'te"xt'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (DQ <'cat <<'> <Id.Lit_BadBackslash '\\'> <EOF> (${ Id.VSub_Name nl) <te> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <xt> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) ) } {(SQ <'te"xt'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (DQ <'cat <<\'EOF\''> (${ Id.VSub_Name nl) <te> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <xt> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) ) } {(SQ <'te"xt'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (DQ <'cat <<\'EO\'F'> (${ Id.VSub_Name nl) <te> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <xt> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) ) } {(SQ <'te"xt'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<EOF'>) ($ Id.VSub_DollarName nl) (SQ <te>) (DQ <'\''>) (SQ <'${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>) } {(SQ <te>) (DQ <'\''>) (SQ <xt>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<EOF'>) ($ Id.VSub_DollarName nl) (SQ <te>) (DQ <'\'\''>) (SQ <'${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>) } {(SQ <te>) (DQ <'\'\''>) (SQ <xt>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=`cat <<EOF'>) (DQ ($ Id.VSub_DollarName nl) <'\ttext'> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) ) (SQ <'`; echo "$x"'>) } {(SQ <'\ttext'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=`cat <<-EOF'>) (DQ ($ Id.VSub_DollarName nl) <'\ttext'> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) ) (SQ <'`; echo $x'>) } {(SQ <text>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=`cat <<-EOF'>) (DQ (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) <'\tEOF'> ($ Id.VSub_DollarName nl) ) (SQ <'`; echo $x'>) } {(SQ <text>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=`cat <<-\\EOF'>) (DQ ($ Id.VSub_DollarName nl) <'\ttext'> (${ Id.VSub_Name nl) <'\tEOF'> ($ Id.VSub_DollarName nl) ) (SQ <'`; echo $x'>) } {(SQ <text>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=`cat <<- "EOF"'>) (DQ ($ Id.VSub_DollarName nl) <'\ttext'> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) ) (SQ <'`; echo $x'>) } {(SQ <text>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=`cat <<- '>) (DQ <'\'EOF\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) <'\tEOF'> ($ Id.VSub_DollarName nl) ) (SQ <'`; echo $x'>) } {(SQ <text>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <results> more_env: [] words: [{<results>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<end_markers>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <end_markers_head> name: end_markers_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for various end markers of here documents'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <end_markers_body> name: end_markers_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <reset> more_env: [] words: [{<reset>} {(SQ <end_markers>)}] redirects: [] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [end] iterable: (for_iter.Words words: [ {<EOF>} {<1>} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\!'> ch:'!')} {(SQ <'$$$'>)} {(DQ <'string '>)} {<a> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\ '> ch: ' ' ) <a> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\ '> ch: ' ' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\ '> ch:' ') } {(SQ <'&'>)} {(SQ )} {(SQ <' '>)} {(SQ <' '>)} {<--STRING-->} {<.>} {(SQ <'~~~'>)} {(SQ <')'>)} {(SQ <'('>)} {(SQ <'#'>)} {(SQ <'()'>)} {(SQ <'(\\)'>)} {(SQ <'(\\/)'>)} {(SQ <-->)} {(SQ <'\\'>)} {(SQ <'{'>)} {(SQ <'}'>)} { < VERYVERYVERYVERYLONGLONGLONGin_fact_absurdly_LONG_LONG_HERE_DOCUMENT_TERMINATING_MARKER_THAT_goes_On_forever_and_ever_and_ever... > } ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ (${ Id.VSub_Name end))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words: [ {(SQ )} {<Id.Lit_Star '*'> <Id.Lit_LBracket '['> (SQ <' ()\\$&#*~'>) <Id.Lit_RBracket ']'> <Id.Lit_Star '*'> } ] ) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat << '>) (DQ (${ Id.VSub_Name end) (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(SQ <text>)} {<0>} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(SQ <text>)} {<0>} ] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end prefix_op: <Id.VSub_Pound '#'> right: <Id.Right_DollarBrace '}'> ) ) } ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words:[{<0>} {<1>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Other '?'>} ) right: <Id.Right_DollarBrace '}'> ) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } { (DQ <'text '> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Other '?'>} ) right: <Id.Right_DollarBrace '}'> ) ) } {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '?'>} ) right: <Id.Right_DollarBrace '}'> ) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } { (DQ <'text '> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '?'>} ) right: <Id.Right_DollarBrace '}'> ) ) } {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Other '?'>} ) right: <Id.Right_DollarBrace '}'> ) <'+'> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <');printf %s "$x"'>) } { (DQ <'text '> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Other '?'>} ) right: <Id.Right_DollarBrace '}'> ) <'+'> ) } {<0>} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) <x> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text '> (${ Id.VSub_Name end) <x>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) <'!'> (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text !'> (${ Id.VSub_Name end))} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) <' '> (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text '> (${ Id.VSub_Name end))} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) <'\t'> (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text \t'> (${ Id.VSub_Name end))} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) <' '> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text '> (${ Id.VSub_Name end) <' '>)} {<0>} ] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end prefix_op: <Id.VSub_Pound '#'> right: <Id.Right_DollarBrace '}'> ) ) } ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words:[{<0>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words:[{<1>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text '> (${ Id.VSub_Name end) (${ Id.VSub_Name end))} {<0>} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words:[{<2-7>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'pfx='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'pfx='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pfx='> name:pfx) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Other '?'>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name pfx) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text '> (${ Id.VSub_Name end) (${ Id.VSub_Name pfx))} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (${ Id.VSub_Name pfx) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text '> (${ Id.VSub_Name pfx) (${ Id.VSub_Name end))} {<0>} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'pfx='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'pfx='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pfx='> name:pfx) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'> } ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'sfx='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'sfx='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'sfx='> name:sfx) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name end> var_name: end suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'> } ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name sfx) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text '> (${ Id.VSub_Name end) (${ Id.VSub_Name sfx))} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (${ Id.VSub_Name pfx) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text '> (${ Id.VSub_Name pfx) (${ Id.VSub_Name end))} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'x=$(cat <<'>) (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) (${ Id.VSub_Name pfx) (${ Id.VSub_Name sfx) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) ) (SQ <'); printf %s "$x"'>) } {(DQ <'text '> (${ Id.VSub_Name pfx) (${ Id.VSub_Name sfx))} {<0>} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <results> more_env: [] words: [{<results>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<incomplete>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <incomplete_head> name: incomplete_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Basic tests for incomplete here documents'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <incomplete_body> name: incomplete_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <reset> more_env: [] words: [{<reset>} {<incomplete>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [{<check>} {(SQ <'cat <<EOF'>)} {(SQ )} {<2>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [{<check>} {(SQ <'cat <<- EOF'>)} {(SQ )} {<2>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [{<check>} {(SQ <'cat <<\\EOF'>)} {(SQ )} {<2>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [{<check>} {(SQ <'cat <<- \\EOF'>)} {(SQ )} {<2>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [{<check>} {(SQ <'cat <<EOF'>) (DQ (${ Id.VSub_Name nl))} {(SQ )} {<2>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [{<check>} {(SQ <'cat <<- EOF'>) (DQ (${ Id.VSub_Name nl))} {(SQ )} {<2>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [{<check>} {(SQ <'cat <<'>) (DQ <'\'EOF\''> (${ Id.VSub_Name nl))} {(SQ )} {<2>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [{<check>} {(SQ <'cat <<- "EOF"'>) (DQ (${ Id.VSub_Name nl))} {(SQ )} {<2>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << EOF'>) (DQ (${ Id.VSub_Name nl) (${ Id.VSub_Name nl))} {(SQ )} {<2>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat <<-EOF'>) (DQ (${ Id.VSub_Name nl) (${ Id.VSub_Name nl))} {(SQ )} {<2>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << '>) (DQ <'\'EOF\''> (${ Id.VSub_Name nl) (${ Id.VSub_Name nl))} {(SQ )} {<2>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat <<-"EOF"'>) (DQ (${ Id.VSub_Name nl) (${ Id.VSub_Name nl))} {(SQ )} {<2>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << EOF'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line 1'>) (DQ (${ Id.VSub_Name nl))} {(SQ )} {<2>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat <<-EOF'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\tline 1'>) (DQ (${ Id.VSub_Name nl)) } {(SQ )} {<2>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << EOF'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line 1'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\tline 2'>) (DQ (${ Id.VSub_Name nl)) } {(SQ )} {<2>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat <<-EOF'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\tline 1'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line 2'>) (DQ (${ Id.VSub_Name nl)) } {(SQ )} {<2>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << EOF'>) (DQ (${ Id.VSub_Name nl) <'line 1'> (${ Id.VSub_Name nl) (${ Id.VSub_Name nl) <line3> (${ Id.VSub_Name nl) (${ Id.VSub_Name nl) <'5!'> (${ Id.VSub_Name nl) ) } {(SQ )} {<2>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <results> more_env: [] words: [{<results>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<lineends>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <lineends_head> name: lineends_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests for line endings in here documents'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <lineends_body> name: lineends_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <reset> more_env: [] words: [{<reset>} {<lineends>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << \\echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ <'\\'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ <echo>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\\\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ <'\\'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'X=3; cat << ec\\ho'>) (DQ (${ Id.VSub_Name nl)) (SQ <'$X\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ <'$X\\'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'X=3; cat << echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'$X'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ <3>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'X=3; cat << echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'$X\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ )} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'X=3; cat << echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'${X}\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ <3echo>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'X=3; cat << echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\\$X\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ <'$Xecho'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'X=3; cat << echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\\\\$X \\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ <'\\3 echo'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << "echo"'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line1\\'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line2\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ <'line1\\ line2\\'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line1\\'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line2\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl)) } {(SQ <line1line2echo>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <results> more_env: [] words: [{<results>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<multiple>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <multiple_head> name: multiple_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for multiple here documents on one cmd line'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <multiple_body> name: multiple_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <reset> more_env: [] words: [{<reset>} {<multiple>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (DQ <'(cat ; cat <&3) <<EOF0 3<<EOF3'> (${ Id.VSub_Name nl) <STDIN> (${ Id.VSub_Name nl) <EOF0> (${ Id.VSub_Name nl) <-3-> (${ Id.VSub_Name nl) <EOF3> (${ Id.VSub_Name nl) ) } {(SQ <'STDIN -3-'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (DQ <'(read line; echo '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <line> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'; cat <<EOF1; echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <line> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <') <<EOF2\n'> <'The File\n'> <'EOF1\n'> <'The Line\n'> <'EOF2\n'> ) } {(SQ <'The Line The File The Line'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (DQ <'(read line; echo '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <line> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'; cat <<EOF; echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <line> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <') <<EOF\n'> <'The File\n'> <'EOF\n'> <'The Line\n'> <'EOF\n'> ) } {(SQ <'The Line The File The Line'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(DQ <'V=1; W=2; cat <<-1; cat <<2; cat <<- 3; cat <<\'4\';'>) (SQ <' cat <<\\5\n'> <'\t\t$V\n'> <'\t\t$W\n'> <'\t\t3\n'> <'\t4\n'> <'\t5\n'> <'\t\t\t1\n'> <'2\n'> <'\t5\n'> <'\t\t\t\t\t4*$W+\\$V\n'> <'\t3\n'> <'$W\n'> <'1\n'> <'2\n'> <'3\n'> <'4\n'> <'7+$V\n'> <'$W+6\n'> <'5\n'> ) } {(SQ <'1 2 3 4 5 5 4*2+$V $W 1 2 3 7+$V $W+6'>)} {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <results> more_env: [] words: [{<results>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<nested>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <nested_head> name: nested_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests for nested here documents for one cmd'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <nested_body> name: nested_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <reset> more_env: [] words: [{<reset>} {<nested>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat << EOF1'>) (DQ (${ Id.VSub_Name nl)) (SQ <'$(cat << EOF2'>) (DQ (${ Id.VSub_Name nl) <LINE> (${ Id.VSub_Name nl) <EOF2> (${ Id.VSub_Name nl)) (SQ <')'>) (DQ (${ Id.VSub_Name nl) <EOF1> (${ Id.VSub_Name nl)) } {(SQ <LINE>)} {<0>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'L='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'L='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L) op: assign_op.Equal rhs: {(SQ <'cat << EOF1'>) (DQ (${ Id.VSub_Name nl)) (SQ <'LINE1$(cat << EOF2'>) (DQ (${ Id.VSub_Name nl)) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'L='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'L='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name L)) (SQ <'LINE2$(cat << EOF3'>) (DQ (${ Id.VSub_Name nl))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'L='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'L='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name L)) (SQ <'LINE3$(cat << EOF4'>) (DQ (${ Id.VSub_Name nl))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'L='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'L='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name L)) (SQ <'LINE4$(cat << EOF5'>) (DQ (${ Id.VSub_Name nl))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'L='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'L='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name L) <LINE5> (${ Id.VSub_Name nl) <EOF5> (${ Id.VSub_Name nl) <')4'> (${ Id.VSub_Name nl) <EOF4> (${ Id.VSub_Name nl) <')3'> (${ Id.VSub_Name nl) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'L='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'L='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name L) <EOF3> (${ Id.VSub_Name nl) <')2'> (${ Id.VSub_Name nl) <EOF2> (${ Id.VSub_Name nl) <')1'> (${ Id.VSub_Name nl) <EOF1> (${ Id.VSub_Name nl) ) } ) ] redirects: [] ) (command.Simple blame_tok: <check> more_env: [] words: [{<check>} {(DQ (${ Id.VSub_Name L))} {(SQ <LINE1LINE2LINE3LINE4LINE54321>)} {<0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <results> more_env: [] words: [{<results>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<quoting>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <quoting_head> name: quoting_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests for use of quotes inside here documents'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <quoting_body> name: quoting_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <reset> more_env: [] words: [{<reset>} {<quoting>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'X=!; cat <<- E\\0F\n'> <'\t\t<'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\''> ch: '\'' ) (SQ <'"'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <' \\\\$X\\$X "'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\''> ch: '\'' ) (SQ <'" \\\\>\n'> <'\tE0F\n'> <'\t'>) } {(SQ <'<'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <'"'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <' \\\\$X\\$X "'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\''> ch: '\'' ) (SQ <'" \\\\>'>) } {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'X=!; cat <<- E0F\n'> <'\t\t<'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\''> ch: '\'' ) (SQ <'"'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <' \\\\$X\\$X "'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\''> ch: '\'' ) (SQ <'" \\\\>\n'> <'\tE0F\n'> <'\t'>) } {(SQ <'<'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <'"'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <' \\!$X "'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\''> ch: '\'' ) (SQ <'" \\>'>) } {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} {(SQ <'cat <<- END\n'> <'\t\t$( echo "'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\''> ch: '\'' ) (SQ <'" ) $( echo '>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <'"'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\''> ch: '\'' ) (SQ <' ) $( echo \\\\ )\n'> <'\tEND\n'> <'\t'>) } { (DQ <'\' '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) ) } {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check> more_env: [] words: [ {<check>} { (SQ <'X=12345; Y="string1 line1?-line2"; Z=; unset W; cat <<-EOF\n'> <'\t\t${#X}${Z:-${Y}}${W+junk}${Y%%l*}${Y#*\\?}\n'> <'\t\t"$Z"'> ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <'$W'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\''> ch: '\'' ) (SQ <' ${Y%" "*} $(( X + 54321 ))\n'> <'\tEOF\n'> <'\t'>) } {(SQ <'5string1 line1?-line2string1 -line2 ""'>) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\''> ch: '\'' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <' string1 66666'>) } {<0>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <results> more_env: [] words: [{<results>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<side_effects>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <side_effects_head> name: side_effects_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests how side effects in here documents are handled'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <side_effects_body> name: side_effects_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'2\\n1\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<-c>} { (SQ <'\n'> <'\t\tunset X\n'> <'\t\tcat <<-EOF\n'> <'\t\t${X=2}\n'> <'\t\tEOF\n'> <'\t\techo "${X-1}"\n'> <'\t\t'> ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <atf_test_case> more_env: [] words: [{<atf_test_case>} {<vicious>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <vicious_head> name: vicious_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_set> more_env: [] words: [ {<atf_set>} {(DQ <descr>)} {(DQ <'Tests for obscure and obnoxious uses of here docs'>)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <vicious_body> name: vicious_body body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <reset> more_env: [] words: [{<reset>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'> ch:E) <ND_SCRIPT>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'cat <<ONE && cat \\\n'> <'<<TWO\n'> <'a\n'> <'ONE\n'> <'b\n'> <'TWO\n'> ] ) ) (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<script>}) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<inline> <Id.Lit_Colon ':'> (SQ <'a\\nb\\n'>)} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<script>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'> ch:E) <ND_SCRIPT>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'prefix() { sed -e "s/^/$1:/"; }\n'> <'DASH_CODE() { :; }\n'> <'\n'> <'prefix A <<XXX && echo "$(prefix B <<XXX\n'> <'echo line 1\n'> <'XXX\n'> <'echo line 2)" && prefix DASH_CODE <<DASH_CODE\n'> <'echo line 3\n'> <'XXX\n'> <'echo line 4)"\n'> <'echo line 5\n'> <'DASH_CODE\n'> ] ) ) (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<script>}) ] do_fork: T ) (command.Simple blame_tok: <atf_check> more_env: [] words: [ {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<ignore>} {<-e>} {<empty>} {(${ Id.VSub_Name TEST_SH)} {<script>} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <atf_init_test_cases> name: atf_init_test_cases body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<do_simple>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<end_markers>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<incomplete>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<lineends>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<multiple>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<nested>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<quoting>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<side_effects>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <atf_add_test_case> more_env: [] words: [{<atf_add_test_case>} {<vicious>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) ] )