(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:expected)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [{<cat>}]
                        redirects: [
                          (redir.HereDoc
                            op: <Id.Redir_DLess '<<'>
                            fd: -1
                            here_begin: {(DQ <EOF>)}
                            here_end_span_id: 15
                            stdin_parts: [
                              <
'("#!/usr/bin/env bash" "  echo \\"bash >= 4.0 required\\" >&2" "#!/bin/bash" "    \\"how do we replace bash?\\")" "    (title \\"gherkin - a lisp1 written in bash4\\")" "    \\"  - no real array in bash\\"" "    \\"Aron Griffis: bash pro tips\\"")\n'
                              >
                            ]
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [3]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:actual)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (C {<./gherkin>} {<-e>} 
                        {
                          (SQ 
                            <
'(load-file "core") (sh (str "grep -h bash " (join " " (remove (fn [x] (or (eq? "simple_test.sh" x) (eq? "README.md" x))) (sh "ls")))))'
                            >
                          )
                        }
                      )
                    ]
                  )
              )
            }
          spids: [19]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.DBracket
                  expr: 
                    (bool_expr.Binary
                      op_id: Id.BoolBinary_GlobDEqual
                      left: {(DQ ($ Id.VSub_DollarName '$expected'))}
                      right: {(DQ ($ Id.VSub_DollarName '$actual'))}
                    )
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [(C {<echo>} {(DQ <'test 1/1 passed'>)})]
          spids: [31 48]
        )
      ]
      else_action: [
        (C {<echo>} {(DQ <'test 1/1 failed'>)})
        (C {<echo>} {(DQ <'EXPECTED: '> ($ Id.VSub_DollarName '$expected'))})
        (C {<echo>} {(DQ <'RECEIVED: '> ($ Id.VSub_DollarName '$actual'))})
      ]
    )
  ]
)