(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.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<basic_test_method_test>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <basic_test_method_test_head>
      name: basic_test_method_test_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests that test method works as expected'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <basic_test_method_test_body>
      name: basic_test_method_test_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: []
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<empty>}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: []
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> <0>}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                    {<-c>}
                    {(SQ <'wc -l'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [<'echo hello\n'>]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> <hello>}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [<'echo hello\n'>]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> <1>}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                    {<-c>}
                    {(SQ <'wc -l'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [<'echo hello\\\n'> <'world\n'>]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> <helloworld>}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [<'echo hello\\\n'> <'world\n'>]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> <2>}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                    {<-c>}
                    {(SQ <'wc -l'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Simple
              blame_tok: <printf>
              more_env: []
              words: [{<printf>} {(SQ <'%s\\n%s\\n%s\\n'>)} {<Line1>} {<Line2>} {<Line3>}]
              redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<File>})]
              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 <'Line1\\nLine2\\nLine3\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'cat File'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'set -- X "" \'\' Y\n'>
                            <'echo ARGS="${#}"\n'>
                            <'echo \'\' -$1- -$2- -$3- -$4-\n'>
                            <'cat <<EOF\n'>
                            <'X=$1\n'>
                            <'EOF\n'>
                            <'cat <<\\EOF\n'>
                            <'Y=$4\n'>
                            <'EOF\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> <Id.Lit_VarLike 'ARGS='> <4>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> (SQ <'-X- -- -- -Y-'>)}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> <Id.Lit_VarLike 'X='> <X>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> (SQ <'Y=\\$4'>)}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<do_input_redirections>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <do_input_redirections_head>
      name: do_input_redirections_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests that simple input redirection works'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <do_input_redirections_body>
      name: do_input_redirections_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <printf>
              more_env: []
              words: [
                {<printf>}
                {(SQ <'%s\\n%s\\n%s\\nEND\\n'>)}
                {(SQ <'First Line'>)}
                {(SQ <'Second Line'>)}
                {(SQ <'Line 3'>)}
              ]
              redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<File>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'cat < File'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'cat <File'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'cat< File'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'cat < "File"'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'< File cat'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <ln>
              more_env: []
              words: [{<ln>} {<File>} {<wc>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'< wc cat'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mv>
              more_env: []
              words: [{<mv>} {<wc>} {<cat>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<match> <Id.Lit_Colon ':'> <4>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'< cat wc'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'for l in 1 2 3; do\n'>
                            <'read line < File\n'>
                            <'echo "$line"\n'>
                            <'done\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-e>}
                    {<empty>}
                    {<-o>}
                    {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nFirst Line\\nFirst Line\\n'>)}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'for l in 1 2 3; do\n'>
                            <'read line\n'>
                            <'echo "$line"\n'>
                            <'done <File\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-e>}
                    {<empty>}
                    {<-o>}
                    {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\n'>)}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'for l in 1 2 3; do\n'>
                            <'read line < File\n'>
                            <'echo "$line"\n'>
                            <'done <File\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-e>}
                    {<empty>}
                    {<-o>}
                    {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nFirst Line\\nFirst Line\\n'>)}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'line=\n'>
                            <'while [ "$line" != END ]; do\n'>
                            <'read line || exit 1\n'>
                            <'echo "$line"\n'>
                            <'done <File\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-e>}
                    {<empty>}
                    {<-o>}
                    {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'while :; do\n'>
                            <'read line || exit 0\n'>
                            <'echo "$line"\n'>
                            <'done <File\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-e>}
                    {<empty>}
                    {<-o>}
                    {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\n'>)}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'l=\'\'\n'>
                            <'while read line < File\n'>
                            <'do\n'>
                            <'echo "$line"\n'>
                            <'l="${l}x"\n'>
                            <'[ ${#l} -ge 3 ] && break\n'>
                            <'done\n'>
                            <'echo DONE\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-e>}
                    {<empty>}
                    {<-o>}
                    {<inline> <Id.Lit_Colon ':'> 
                      (SQ <'First Line\\nFirst Line\\nFirst Line\\nDONE\\n'>)
                    }
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'while read line\n'>
                            <'do\n'>
                            <'echo "$line"\n'>
                            <'done <File\n'>
                            <'echo DONE\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-e>}
                    {<empty>}
                    {<-o>}
                    {<inline> <Id.Lit_Colon ':'> 
                      (SQ <'First Line\\nSecond Line\\nLine 3\\nEND\\nDONE\\n'>)
                    }
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'l=\'\'\n'>
                            <'while read line\n'>
                            <'do\n'>
                            <'echo "$line"\n'>
                            <'l="${l}x"\n'>
                            <'[ ${#l} -ge 3 ] && break\n'>
                            <'done <File\n'>
                            <'echo DONE\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-e>}
                    {<empty>}
                    {<-o>}
                    {<inline> <Id.Lit_Colon ':'> (SQ <'First Line\\nSecond Line\\nLine 3\\nDONE\\n'>)}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'l=\'\'\n'>
                            <'while read line1 <File\n'>
                            <'do\n'>
                            <'read line2\n'>
                            <'echo "$line1":"$line2"\n'>
                            <'l="${l}x"\n'>
                            <'[ ${#l} -ge 2 ] && break\n'>
                            <'done <File\n'>
                            <'echo DONE\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-e>}
                    {<empty>}
                    {<-o>}
                    {<inline> <Id.Lit_Colon ':'> 
                      (SQ <'First Line:First Line\\nFirst Line:Second Line\\nDONE\\n'>)
                    }
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<do_output_redirections>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <do_output_redirections_head>
      name: do_output_redirections_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Test Output redirections'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <do_output_redirections_body>
      name: do_output_redirections_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (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.ShAssignment
              left: <Id.Lit_VarLike 'T='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'T='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'T='> name:T)
                  op: assign_op.Equal
                  rhs: {<0>}
                )
              ]
              redirects: []
            )
            (command.ShFunction
              name_tok: <i>
              name: i
              body: 
                (BraceGroup
                  left: <Id.Lit_LBrace '{'>
                  children: [
                    (command.Sentence
                      child: 
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'T='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'T='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'T='> name:T)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (CommandSub
                                    left_token: <Id.Left_DollarParen '$('>
                                    child: 
                                      (command.Simple
                                        blame_tok: <expr>
                                        more_env: []
                                        words: [
                                          {<expr>}
                                          {(DQ ($ Id.VSub_DollarName T))}
                                          {<Id.Lit_Other '+'>}
                                          {<1>}
                                        ]
                                        redirects: []
                                        do_fork: T
                                      )
                                    right: <Id.Eof_RParen _>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  redirects: []
                  right: <Id.Lit_RBrace '}'>
                )
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {<Output>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {<Output>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [{<atf_fail>} {(DQ <'Unable to remove Output file'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.Sentence
              child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T)
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'> Output'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {<Output>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {(DQ <'#'> ($ Id.VSub_DollarName T) <': Did not make Output file'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {<Output>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Sentence
              child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T)
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'>> Output'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {<Output>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {(DQ <'#'> ($ Id.VSub_DollarName T) <': Did not make Output file'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {<Output>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Sentence
              child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T)
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'>| Output'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {<Output>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {(DQ <'#'> ($ Id.VSub_DollarName T) <': Did not make Output file'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {<Output>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <i>
              more_env: []
              words: [{<i>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo Hello >Output'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-s>} {<Output>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {(DQ <'#'> ($ Id.VSub_DollarName T) <': Did not make non-empty Output file'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <Hello>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) 
                        <': Incorrect Output: Should be \'Hello\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <i>
              more_env: []
              words: [{<i>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo Hello>!Output'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-s>} {<Output>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {(DQ <'#'> ($ Id.VSub_DollarName T) <': Did not make non-empty Output file'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <Hello>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) 
                        <': Incorrect Output: Should be \'Hello\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <i>
              more_env: []
              words: [{<i>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo Bye >>Output'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-s>} {<Output>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [{<atf_fail>} {(DQ <'#'> ($ Id.VSub_DollarName T) <': Removed Output file'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <Hello> (${ Id.VSub_Name nl) <Bye>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Output: Should be \'Hello'> 
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\\\'>
                          ch: '\\'
                        ) <'nBye\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Sentence
              child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T)
              terminator: <Id.Op_Semi _>
            )
            (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 <'line 1\\nline 2\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo line 1 > Output; echo line 2 >> Output; cat Output'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <'line 1'> (${ Id.VSub_Name nl) <'line 2'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Output: Should be \'line 1'> 
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\\\'>
                          ch: '\\'
                        ) <'nline 2\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Sentence
              child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T)
              terminator: <Id.Op_Semi _>
            )
            (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 <'line 2\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo line 1 > Output; echo line 2'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <'line 1'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) 
                        <': Incorrect Output: Should be \'line 1\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Sentence
              child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T)
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'(echo line 1; echo line 2 > Out2) > Out1'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out1>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <'line 1'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) 
                        <': Incorrect Out1: Should be \'line 1\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out1>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out2>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <'line 2'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) 
                        <': Incorrect Out2: Should be \'line 2\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out2>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Sentence
              child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T)
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'{ echo line 1; echo line 2 > Out2;} > Out1'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out1>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <'line 1'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) 
                        <': Incorrect Out1: Should be \'line 1\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out1>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out2>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <'line 2'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) 
                        <': Incorrect Out2: Should be \'line 2\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out2>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Sentence
              child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T)
              terminator: <Id.Op_Semi _>
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {<Out1>} {<Out2>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'for arg in \'line 1\' \'line 2\' \'line 3\'\n'>
                            <'do\n'>
                            <'echo "$arg"\n'>
                            <'echo "$arg" > Out1\n'>
                            <'done > Out2\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<empty>}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out1>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <'line 3'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) 
                        <':  Incorrect Out1: Should be \'line 3\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out1>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out2>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <'line 1'> (${ Id.VSub_Name nl) <'line 2'> (${ Id.VSub_Name nl) <'line 3'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out2: Should be \'line 1'> 
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\\\'>
                          ch: '\\'
                        ) <'nline 2'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') <'nline 3\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out2>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Sentence
              child: (command.Simple blame_tok:<i> more_env:[] words:[{<i>}] redirects:[] do_fork:T)
              terminator: <Id.Op_Semi _>
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {<Out1>} {<Out2>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <EOF>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'for arg in \'line 1\' \'line 2\' \'line 3\'\n'>
                            <'do\n'>
                            <'echo "$arg"\n'>
                            <'echo "$arg" >> Out1\n'>
                            <'done > Out2\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<empty>}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out1>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <'line 1'> (${ Id.VSub_Name nl) <'line 2'> (${ Id.VSub_Name nl) <'line 3'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out1: Should be \'line 1'> 
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\\\'>
                          ch: '\\'
                        ) <'nline 2'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') <'nline 3\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out1>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out2>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(DQ <'line 1'> (${ Id.VSub_Name nl) <'line 2'> (${ Id.VSub_Name nl) <'line 3'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'#'> ($ Id.VSub_DollarName T) <': Incorrect Out2: Should be \'line 1'> 
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\\\'>
                          ch: '\\'
                        ) <'nline 2'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') <'nline 3\' is \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Out2>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<fd_redirections>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <fd_redirections_head>
      name: fd_redirections_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests redirections to/from specific descriptors'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <fd_redirections_body>
      name: fd_redirections_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_require_prog>
              more_env: []
              words: [{<atf_require_prog>} {<'/bin/echo'>}]
              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: {(SQ <DONE>)}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'f() {\n'>
                        <'/bin/echo nothing "$1" >& "$1"\n'>
                        <'}\n'>
                        <'for n\n'>
                        <'do\n'>
                        <'eval "f $n $n"\'> file-$n\'\n'>
                        <'done\n'>
                      ]
                    )
                )
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {<helper.sh>}
                )
              ]
              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: {(SQ <DONE>)}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'f() {\n'>
                        <'(read -r var; echo "${var}") <&"$1"\n'>
                        <'}\n'>
                        <'for n\n'>
                        <'do\n'>
                        <'x=$( eval "f $n $n"\'< file-$n\' )\n'>
                        <'test "${x}" = "nothing $n" || echo "$n"\n'>
                        <'done\n'>
                      ]
                    )
                )
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {<reread.sh>}
                )
              ]
              do_fork: T
            )
            (command.ShFunction
              name_tok: <validate>
              name: validate
              body: 
                (BraceGroup
                  left: <Id.Lit_LBrace '{'>
                  children: [
                    (command.ForEach
                      keyword: <Id.KW_For for>
                      iter_names: [n]
                      iterable: (for_iter__Args)
                      body: 
                        (command.DoGroup
                          left: <Id.KW_Do do>
                          children: [
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [{<test>} {<-e>} {(DQ <file-> ($ Id.VSub_DollarName n))}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <atf_fail>
                                  more_env: []
                                  words: [
                                    {<atf_fail>}
                                    {(DQ <file-> ($ Id.VSub_DollarName n) <' not created'>)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_DPipe _>]
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'C='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'C='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'C='> name:C)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_DollarParen '$('>
                                        child: 
                                          (command.Simple
                                            blame_tok: <cat>
                                            more_env: []
                                            words: [{<cat>} {<file-> (DQ ($ Id.VSub_DollarName n))}]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Eof_RParen _>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {(DQ ($ Id.VSub_DollarName C))}
                                    {<Id.Lit_Equals '='>}
                                    {(DQ <'nothing '> ($ Id.VSub_DollarName n))}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <atf_fail>
                                  more_env: []
                                  words: [
                                    {<atf_fail>}
                                    {
                                      (DQ <file-> ($ Id.VSub_DollarName n) <' contains \''> 
                                        ($ Id.VSub_DollarName C) <'\' not \'nothing '> ($ Id.VSub_DollarName n) <'\''>
                                      )
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_DPipe _>]
                            )
                          ]
                          right: <Id.KW_Done done>
                        )
                      redirects: []
                    )
                  ]
                  redirects: []
                  right: <Id.Lit_RBrace '}'>
                )
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<helper.sh>}
                {<1>}
                {<2>}
                {<3>}
                {<4>}
                {<5>}
                {<6>}
                {<7>}
                {<8>}
                {<9>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <validate>
              more_env: []
              words: [{<validate>} {<1>} {<2>} {<3>} {<4>} {<5>} {<6>} {<7>} {<8>} {<9>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<reread.sh>}
                {<3>}
                {<4>}
                {<5>}
                {<6>}
                {<7>}
                {<8>}
                {<9>}
              ]
              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: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <ulimit>
                            more_env: []
                            words: [{<ulimit>} {<-n>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              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_DollarName L))}
                            {<-ge>}
                            {<30>}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-e>}
                        {<empty>}
                        {<-o>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<helper.sh>}
                        {<10>}
                        {<15>}
                        {<19>}
                        {<20>}
                        {<25>}
                        {<29>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <validate>
                      more_env: []
                      words: [{<validate>} {<10>} {<15>} {<19>} {<20>} {<25>} {<29>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-e>}
                        {<empty>}
                        {<-o>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<reread.sh>}
                        {<10>}
                        {<15>}
                        {<19>}
                        {<20>}
                        {<25>}
                        {<29>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [2722 2737]
                )
              ]
              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.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {(DQ ($ Id.VSub_DollarName L))}
                            {<-ge>}
                            {<100>}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-e>}
                        {<empty>}
                        {<-o>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<helper.sh>}
                        {<32>}
                        {<33>}
                        {<49>}
                        {<50>}
                        {<51>}
                        {<63>}
                        {<64>}
                        {<65>}
                        {<77>}
                        {<88>}
                        {<99>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <validate>
                      more_env: []
                      words: [
                        {<validate>}
                        {<32>}
                        {<33>}
                        {<49>}
                        {<50>}
                        {<51>}
                        {<63>}
                        {<64>}
                        {<65>}
                        {<77>}
                        {<88>}
                        {<99>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-e>}
                        {<empty>}
                        {<-o>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<reread.sh>}
                        {<32>}
                        {<33>}
                        {<49>}
                        {<50>}
                        {<51>}
                        {<63>}
                        {<64>}
                        {<65>}
                        {<77>}
                        {<88>}
                        {<99>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [2832 2847]
                )
              ]
              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.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {(DQ ($ Id.VSub_DollarName L))}
                            {<-ge>}
                            {<500>}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-e>}
                        {<empty>}
                        {<-o>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<helper.sh>}
                        {<100>}
                        {<101>}
                        {<199>}
                        {<200>}
                        {<222>}
                        {<333>}
                        {<444>}
                        {<499>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <validate>
                      more_env: []
                      words: [{<validate>} {<100>} {<101>} {<199>} {<200>} {<222>} {<333>} {<444>} {<499>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-e>}
                        {<empty>}
                        {<-o>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<reread.sh>}
                        {<100>}
                        {<101>}
                        {<199>}
                        {<200>}
                        {<222>}
                        {<333>}
                        {<444>}
                        {<499>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [2972 2987]
                )
              ]
              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.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {(DQ ($ Id.VSub_DollarName L))}
                            {<-gt>}
                            {<1005>}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-e>}
                        {<empty>}
                        {<-o>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<helper.sh>}
                        {<1000>}
                        {<1001>}
                        {<1002>}
                        {<1003>}
                        {<1004>}
                        {<1005>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <validate>
                      more_env: []
                      words: [{<validate>} {<1000>} {<1001>} {<1002>} {<1003>} {<1004>} {<1005>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-e>}
                        {<empty>}
                        {<-o>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<reread.sh>}
                        {<1000>}
                        {<1001>}
                        {<1002>}
                        {<1003>}
                        {<1004>}
                        {<1005>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [3094 3109]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<local_redirections>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <local_redirections_head>
      name: local_redirections_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests that exec can reassign file descriptors in the shell itself'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <local_redirections_body>
      name: local_redirections_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (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: {(SQ <DONE>)}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'for f\n'>
                        <'do\n'>
                        <'eval "exec $f"\'> file-$f\'\n'>
                        <'done\n'>
                        <'\n'>
                        <'for f\n'>
                        <'do\n'>
                        <'printf \'%s\\n\' "Hello $f" >&"$f"\n'>
                        <'done\n'>
                        <'\n'>
                        <'for f\n'>
                        <'do\n'>
                        <'eval "exec $f"\'>&-\'\n'>
                        <'done\n'>
                        <'\n'>
                        <'for f\n'>
                        <'do\n'>
                        <'eval "exec $f"\'< file-$f\'\n'>
                        <'done\n'>
                        <'\n'>
                        <'for f\n'>
                        <'do\n'>
                        <'exec <& "$f"\n'>
                        <'read -r var || echo >&2 "No data in file-$f"\n'>
                        <'read -r x && echo >&2 "Too much data in file-${f}: $x"\n'>
                        <'test "${var}" = "Hello $f" ||\n'>
                        <'    echo >&2 "file-$f contains \'${var}\' not \'Hello $f\'"\n'>
                        <'done\n'>
                      ]
                    )
                )
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {<helper.sh>}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<helper.sh>}
                {<3>}
                {<4>}
                {<5>}
                {<6>}
                {<7>}
                {<8>}
                {<9>}
              ]
              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: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <ulimit>
                            more_env: []
                            words: [{<ulimit>} {<-n>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              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_DollarName L))}
                            {<-ge>}
                            {<30>}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-o>}
                        {<empty>}
                        {<-e>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<helper.sh>}
                        {<10>}
                        {<11>}
                        {<13>}
                        {<15>}
                        {<16>}
                        {<19>}
                        {<20>}
                        {<28>}
                        {<29>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [3330 3345]
                )
              ]
              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.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {(DQ ($ Id.VSub_DollarName L))}
                            {<-ge>}
                            {<100>}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-o>}
                        {<empty>}
                        {<-e>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<helper.sh>}
                        {<30>}
                        {<31>}
                        {<32>}
                        {<63>}
                        {<64>}
                        {<65>}
                        {<77>}
                        {<88>}
                        {<99>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [3394 3409]
                )
              ]
              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.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {(DQ ($ Id.VSub_DollarName L))}
                            {<-ge>}
                            {<500>}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-o>}
                        {<empty>}
                        {<-e>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<helper.sh>}
                        {<100>}
                        {<101>}
                        {<111>}
                        {<199>}
                        {<200>}
                        {<201>}
                        {<222>}
                        {<333>}
                        {<499>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [3458 3473]
                )
              ]
              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.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {(DQ ($ Id.VSub_DollarName L))}
                            {<-ge>}
                            {<1005>}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-o>}
                        {<empty>}
                        {<-e>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<helper.sh>}
                        {<1000>}
                        {<1001>}
                        {<1002>}
                        {<1003>}
                        {<1004>}
                        {<1005>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [3522 3537]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<named_fd_redirections>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <named_fd_redirections_head>
      name: named_fd_redirections_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests redirections to /dev/stdout (etc)'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <named_fd_redirections_body>
      name: named_fd_redirections_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-c>} {<'/dev/stdout'>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (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 <'OK\\n'>)}
                        {<-e>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<-c>}
                        {(SQ <'echo OK >/dev/stdout'>)}
                      ]
                      redirects: []
                      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 <'OK\\n'>)}
                        {<-e>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<-c>}
                        {(SQ <'/bin/echo OK >/dev/stdout'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [3613 3622]
                )
              ]
              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: <test>
                          more_env: []
                          words: [{<test>} {<-c>} {<'/dev/stdin'>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <atf_require_prog>
                      more_env: []
                      words: [{<atf_require_prog>} {<cat>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Pipeline
                      children: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {<GOOD>}]
                          redirects: []
                          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 <'GOOD\\n'>)}
                            {<-e>}
                            {<empty>}
                            {(${ Id.VSub_Name TEST_SH)}
                            {<-c>}
                            {(SQ <'read var </dev/stdin; echo $var'>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_Pipe _>]
                    )
                    (command.Pipeline
                      children: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {<GOOD>}]
                          redirects: []
                          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 <'GOOD\\n'>)}
                            {<-e>}
                            {<empty>}
                            {(${ Id.VSub_Name TEST_SH)}
                            {<-c>}
                            {(SQ <'cat </dev/stdin'>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_Pipe _>]
                    )
                  ]
                  spids: [3695 3704]
                )
              ]
              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: <test>
                          more_env: []
                          words: [{<test>} {<-c>} {<'/dev/stderr'>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-e>}
                        {<inline> <Id.Lit_Colon ':'> (SQ <'OK\\n'>)}
                        {<-o>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<-c>}
                        {(SQ <'echo OK 2>/dev/stderr >&2'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <atf_check>
                      more_env: []
                      words: [
                        {<atf_check>}
                        {<-s>}
                        {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                        {<-e>}
                        {<inline> <Id.Lit_Colon ':'> (SQ <'OK\\n'>)}
                        {<-o>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<-c>}
                        {(SQ <'/bin/echo OK 2>/dev/stderr >&2'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [3795 3804]
                )
              ]
              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.AndOr
                          children: [
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [{<test>} {<-c>} {<'/dev/fd/8'>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [{<test>} {<-c>} {<'/dev/fd/9'>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: [<Id.Op_DAmp _>]
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (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 <'EIGHT\\n'>)}
                        {<-e>}
                        {<empty>}
                        {(${ Id.VSub_Name TEST_SH)}
                        {<-c>}
                        {
                          (SQ <'printf "%s\\n" EIGHT 8>&1 >/dev/fd/8 |\n'> 
                            <'\t\t\t\t\tcat 9<&0 </dev/fd/9'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [3877 3894]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<redir_in_case>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <redir_in_case_head>
      name: redir_in_case_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests that sh(1) allows just redirections '>)}
                {(DQ <'in case statements. (PR bin/48631)'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <redir_in_case_body>
      name: redir_in_case_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>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'case x in (whatever) >foo;; esac'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'case x in (whatever) >foo 2>&1;; esac'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'case x in (whatever) >foo 2>&1 </dev/null;; esac'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'case x in (whatever) >${somewhere};; esac'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<incorrect_redirections>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <incorrect_redirections_head>
      name: incorrect_redirections_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests that sh(1) correctly ignores non-redirections'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <incorrect_redirections_body>
      name: incorrect_redirections_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo foo>'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'read foo<'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo foo<>'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo x > '>) (DQ ($ Id.VSub_DollarName nl))}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'read x < '>) (DQ ($ Id.VSub_DollarName nl))}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo x <> '>) (DQ ($ Id.VSub_DollarName nl))}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo x >< anything'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo x >>< anything'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo x >|< anything'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo x > ; read x < /dev/null || echo bad'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<not-exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<not-empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'read x < & echo y > /dev/null; wait && echo bad'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {<Output>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<inline> <Id.Lit_Colon ':'> (SQ <'A Line > Output\\n'>)}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo A Line \\> Output'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {<Output>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_file>
                  more_env: []
                  words: [{<atf_file>} {(DQ <'File \'Output\' appeared and should not have'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {<Output>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo A Line \\>> Output'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {<Output>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_file>
                  more_env: []
                  words: [{<atf_file>} {(DQ <'File \'Output\' not created when it should'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(SQ <'A Line >'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'Output file contains \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {<Output>}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\' instead of \''>
                      ) (SQ <'A Line >'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'')
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [
                    {<rm>}
                    {<-f>}
                    {<Output>}
                    {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\>'> ch:'>')}
                  ]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'echo A Line >\\> Output'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {<Output>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_file>
                  more_env: []
                  words: [{<atf_file>} {(DQ <'File \'Output\' appeared and should not have'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {(SQ <'>'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_file>
                  more_env: []
                  words: [{<atf_file>} {(DQ <'File \'>\' not created when it should'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {(SQ <'>'>)}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                    {<Id.Lit_Equals '='>}
                    {(SQ <'A Line Output'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'Output file (\'>\') contains \''> 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {(SQ <'>'>)}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        ) <'\' instead of \'A Line Output\''>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<redir_here_doc>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <redir_here_doc_head>
      name: redir_here_doc_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests that sh(1) correctly processes \'here\' doc '>)}
                {(DQ <'input redirections'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <redir_here_doc_body>
      name: redir_here_doc_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [<'cat <<EOF\n'> <'printf \'%s\\n\' \'hello\\n\'\n'> <'EOF\n'>]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> <printf>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> (SQ <'hello\\\\n'>)}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<subshell_redirections>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <subshell_redirections_head>
      name: subshell_redirections_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests redirection interactions between shell and '>)}
                {(DQ <'its sub-shell(s)'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <subshell_redirections_body>
      name: subshell_redirections_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_require_prog>
              more_env: []
              words: [{<atf_require_prog>} {<cat>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'LIM='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'LIM='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LIM='> name:LIM)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <ulimit>
                            more_env: []
                            words: [{<ulimit>} {<-n>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'exec 6>output-file\n'>
                            <'\n'>
                            <'( printf "hello\\n" >&6 )\n'>
                            <'\n'>
                            <'exec 8<output-file\n'>
                            <'\n'>
                            <'( read hello <&8 ; test hello = "$hello" || echo >&2 Hello )\n'>
                            <'\n'>
                            <'( printf "bye-bye\\n" >&6 )\n'>
                            <'\n'>
                            <'( exec 8<&- )\n'>
                            <'read bye <&8 || echo >&2 "Closed?"\n'>
                            <'echo Bye="$bye"\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_check>
                  more_env: []
                  words: [
                    {<atf_check>}
                    {<-s>}
                    {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                    {<-o>}
                    {<match> <Id.Lit_Colon ':'> <Id.Lit_VarLike 'Bye='> <bye-bye>}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'for arg in one-4 two-24 three-14\n'>
                            <'do\n'>
                            <'fd=${arg#*-}\n'>
                            <'file=${arg%-*}\n'>
                            <'eval "exec ${fd}>${file}"\n'>
                            <'done\n'>
                            <'\n'>
                            <'for arg in one-5 two-7 three-19\n'>
                            <'do\n'>
                            <'fd=${arg#*-}\n'>
                            <'file=${arg%-*}\n'>
                            <'eval "exec ${fd}<${file}"\n'>
                            <'done\n'>
                            <'\n'>
                            <'(\n'>
                            <'echo line-1 >&4\n'>
                            <'echo line-2 >&24\n'>
                            <'echo line-3 >&14\n'>
                            <'echo go\n'>
                            <') | (\n'>
                            <'read go\n'>
                            <'read x <&5\n'>
                            <'read y <&7\n'>
                            <'read z <&19\n'>
                            <'\n'>
                            <'printf "%s\\n" "${x}" "${y}" "${z}"\n'>
                            <')\n'>
                          ]
                        )
                    )
                  ]
                  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 <'line-1\\nline-2\\nline-3\\n'>)}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (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: {(SQ <DONE>)}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'for arg in one-4-5 two-6-7 three-8-9 four-11-10 five-3-12\n'>
                            <'do\n'>
                            <'ofd=${arg##*-}\n'>
                            <'file=${arg%-*}\n'>
                            <'ifd=${file#*-}\n'>
                            <'file=${file%-*}\n'>
                            <'eval "exec ${ofd}>${file}"\n'>
                            <'eval "exec ${ifd}<${file}"\n'>
                            <'done\n'>
                            <'\n'>
                            <'( ( ( echo line-1 >& 13 ) 13>&12 ) 12>&5 ) >stdout 2>errout\n'>
                            <'( ( ( echo line-2 >& 4) 13>&12 ) 4>&7 ) >>stdout 2>>errout\n'>
                            <'( ( ( echo line-3 >& 6) 8>&1 6>&11 >&12) 11>&9 >&7 ) >>stdout\n'>
                            <'\n'>
                            <'( ( ( cat <&13 >&12 ) 13<&8 12>&10 ) 10>&1 8<&6 ) 6<&4\n'>
                            <'( ( ( cat <&4 ) <&4 6<&8 8<&11  )\n'>
                            <'<&4 4<&6 6<&8 8<&11 ) <&4 4<&6 6<&8 8<&11 11<&3\n'>
                            <'( ( ( cat <&7 >&1 ) 7<&6 >&10 ) 10>&2 6<&8 ) 2>&1\n'>
                          ]
                        )
                    )
                  ]
                  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 <'line-1\\nline-2\\nline-3\\n'>)}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<ulimit_redirection_interaction>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <ulimit_redirection_interaction_head>
      name: ulimit_redirection_interaction_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests interactions between redirect and ulimit -n '>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <ulimit_redirection_interaction_body>
      name: ulimit_redirection_interaction_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_require_prog>
              more_env: []
              words: [{<atf_require_prog>} {<ls>}]
              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: {(SQ <DONE>)}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'oLIM=$(ulimit -n)\n'>
                        <'HRD=$(ulimit -H -n)\n'>
                        <'test "${oLIM}" -lt "${HRD}"  && ulimit -n "${HRD}"\n'>
                        <'LIM=$(ulimit -n)\n'>
                        <'\n'>
                        <'FDs=\n'>
                        <'LFD=-1\n'>
                        <'while [ ${LIM} -gt 16 ]\n'>
                        <'do\n'>
                        <'FD=$(( ${LIM} - 1 ))\n'>
                        <'if [ "${FD}" -eq "${LFD}" ]; then\n'>
                        <'echo >&2 "Infinite loop... (busted $(( )) ??)"\n'>
                        <'exit 1\n'>
                        <'fi\n'>
                        <'LFD="${FD}"\n'>
                        <'\n'>
                        <'eval "exec ${FD}"\'> /dev/null\'\n'>
                        <'FDs="${FD}${FDs:+ }${FDs}"\n'>
                        <'\n'>
                        <'(\n'>
                        <'FD=$(( ${LIM} + 1 ))\n'>
                        <'eval "exec ${FD}"\'> /dev/null\'\n'>
                        <'echo "Reached unreachable command"\n'>
                        <') 2>/dev/null && echo >&2 "Opened beyond limit!"\n'>
                        <'\n'>
                        <'(eval \'ls 2>&1 3>&1 4>&1 5>&1 \'"${FD}"\'>&1\') >&"${FD}"\n'>
                        <'\n'>
                        <'LIM=$(( ${LIM} / 2 ))\n'>
                        <'ulimit -S -n "${LIM}"\n'>
                        <'done\n'>
                        <'\n'>
                        <'# Even though ulimit has been reduced, open fds should work\n'>
                        <'for FD in ${FDs}\n'>
                        <'do\n'>
                        <'echo ${FD} in ${FDs} >&"${FD}" || exit 1\n'>
                        <'done\n'>
                        <'\n'>
                        <'ulimit -S -n "${oLIM}"\n'>
                        <'\n'>
                        <'# maybe more later...\n'>
                        <'\n'>
                      ]
                    )
                )
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {<helper.sh>}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<empty>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<helper.sh>}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<validate_fn_redirects>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <validate_fn_redirects_head>
      name: validate_fn_redirects_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests various redirections applied to functions '>)}
                {(DQ <'See PR bin/48875'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <validate_fn_redirects_body>
      name: validate_fn_redirects_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (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: {(SQ <DONE>)}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'f() {\n'> <'printf \'%s\\n\' In-Func\n'> <'}\n'>]
                    )
                )
                (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<f-def>})
              ]
              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 <'In-Func\\nsuccess1\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(DQ <'. ./f-def; f ; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success1'>)}
              ]
              redirects: []
              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 <'success2\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (DQ <'. ./f-def; f >/dev/null; printf \'%s'> <Id.Lit_BadBackslash '\\'> 
                    <'n\' success2'>
                  )
                }
              ]
              redirects: []
              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 <'success3\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(DQ <'. ./f-def; f >&- ; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success3'>)}
              ]
              redirects: []
              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 <'In-Func\\nsuccess4\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (DQ <'. ./f-def; f & wait; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success4'>)
                }
              ]
              redirects: []
              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 <'success5\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (DQ <'. ./f-def; f >&- & wait; printf \'%s'> <Id.Lit_BadBackslash '\\'> 
                    <'n\' success5'>
                  )
                }
              ]
              redirects: []
              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 <'In-Func\\nIn-Func\\nsuccess6\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(DQ <'. ./f-def; f;f; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success6'>)}
              ]
              redirects: []
              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 <'In-Func\\nIn-Func\\nsuccess7\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(DQ <'. ./f-def; { f;f;}; printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' success7'>)}
              ]
              redirects: []
              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 <'In-Func\\nIn-Func\\nsuccess8\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (DQ <'. ./f-def; { f;f;}& wait; printf \'%s'> <Id.Lit_BadBackslash '\\'> 
                    <'n\' success8'>
                  )
                }
              ]
              redirects: []
              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 <'In-Func\\nsuccess9\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (DQ <'. ./f-def; { f>/dev/null;f;}& wait; printf \'%s'> <Id.Lit_BadBackslash '\\'> 
                    <'n\' success9'>
                  )
                }
              ]
              redirects: []
              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 <'In-Func\\nsuccess10\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (DQ <'. ./f-def; { f;f>/dev/null;}& wait; printf \'%s'> <Id.Lit_BadBackslash '\\'> 
                    <'n\' success10'>
                  )
                }
              ]
              redirects: []
              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 <'Func a\\nFunc b\\nFunc c\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (SQ <'\n'> <'\t\t\tf() {\n'> <'\t\t\t\techo Func "$1"\n'> <'\t\t\t}\n'> 
                    <'\t\t\texec 3<&0 4>&1\n'> <'\t\t\t( echo x-a; echo y-b; echo z-c ) |\n'> <'\t\t\twhile read A\n'> <'\t\t\tdo\n'> 
                    <'\t\t\t\tB=${A#?-}\n'> <'\t\t\t\tf "$B" <&3 >&4\n'> <'\t\t\tdone >&2'>
                  )
                }
              ]
              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: {(SQ <DONE>)}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'f() {\n'>
                        <'printf \'%s\' " hello $1"\n'>
                        <'}\n'>
                        <'exec 3>&1\n'>
                        <'echo $( for i in a b c\n'>
                        <'do printf \'%s\' @$i; f $i >&3; done >foo\n'>
                        <')\n'>
                        <'printf \'%s\\n\' foo=$(cat foo)\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>}
                {<-e>}
                {<empty>}
                {<-o>}
                {<inline> <Id.Lit_Colon ':'> (SQ <' hello a hello b hello c\\nfoo=@a@b@c\\n'>)}
                {(${ Id.VSub_Name TEST_SH)}
                {<Script>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [
                    {<echo>}
                    {
                      (DQ <'. ./f-def || echo >&2 FAIL\n'> <'\t\tf\n'> <'\t\tprintf \'%s'> 
                        <Id.Lit_BadBackslash '\\'> <'n\' stdin1\n'> <'\t'>
                      )
                    }
                  ]
                  redirects: []
                  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 <'In-Func\\nstdin1\\n'>)}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [
                    {<echo>}
                    {
                      (SQ <'\n'> <'\t\t. ./f-def || echo >&2 FAIL\n'> <'\t\tf >&-\n'> 
                        <'\t\tprintf "%s\\n" stdin2\n'> <'\t'>
                      )
                    }
                  ]
                  redirects: []
                  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 <'stdin2\\n'>)}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (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: {(SQ <DONE>)}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'f() {\n'>
                        <'echo -n f >&3\n'>
                        <'sleep 4\n'>
                        <'echo -n F >&3\n'>
                        <'}\n'>
                        <'g() {\n'>
                        <'echo -n g >&3\n'>
                        <'sleep 2\n'>
                        <'echo -n G >&3\n'>
                        <'}\n'>
                        <'h() {\n'>
                        <'echo -n h >&3\n'>
                        <'}\n'>
                      ]
                    )
                )
                (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<fgh.def>})
              ]
              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 <fFgGh>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {(SQ <'. ./fgh.def || echo >&2 FAIL\n'> <'\t\t\texec 3>&1\n'> <'\t\t\tf; g; h'>)}
              ]
              redirects: []
              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 <fghGF>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (SQ <'. ./fgh.def || echo >&2 FAIL\n'> <'\t\t\texec 3>&1\n'> 
                    <'\t\t\tf & sleep 1; g & sleep 1; h; wait'>
                  )
                }
              ]
              redirects: []
              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 <'fFgGhX Y\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (SQ <'. ./fgh.def || echo >&2 FAIL\n'> <'\t\t\texec 3>&1\n'> 
                    <'\t\t\techo X $( f ; g ; h ) Y'>
                  )
                }
              ]
              redirects: []
              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 <'fghX Y\\nGF'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (SQ <'. ./fgh.def || echo >&2 FAIL\n'> <'\t\t\texec 3>&1\n'> 
                    <'\t\t\techo X $( f >&- & sleep 1; g >&- & sleep 1 ; h ) Y\n'> <'\t\t\tsleep 3\n'> <'\t\t\texec 4>&1 || echo FD_FAIL\n'> <'\t\t\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [
                    {<echo>}
                    {
                      (SQ <'\n'> <'\t\t. ./fgh.def || echo >&2 FAIL\n'> <'\t\texec 3>&1\n'> 
                        <'\t\techo X $( f >&- & sleep 1; g >&- & sleep 1 ; h ) Y\n'> <'\t\tsleep 3\n'> <'\t\texec 4>&1 || echo FD_FAIL\n'> <'\t'>
                      )
                    }
                  ]
                  redirects: []
                  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 <'fghX Y\\nGF'>)}
                    {<-e>}
                    {<empty>}
                    {(${ Id.VSub_Name TEST_SH)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          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>} {<basic_test_method_test>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<do_input_redirections>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<do_output_redirections>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<fd_redirections>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<local_redirections>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<incorrect_redirections>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<named_fd_redirections>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<redir_here_doc>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<redir_in_case>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<subshell_redirections>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<ulimit_redirection_interaction>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<validate_fn_redirects>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
  ]
)