(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 '$('>
                child: 
                  (command.Simple
                    words: [{<cat>}]
                    redirects: [
                      (redir
                        op: <Id.Redir_DLess '<<'>
                        loc: (redir_loc.Fd fd:0)
                        arg: 
                          (redir_param.HereDoc
                            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'
                              >
                            ]
                          )
                      )
                    ]
                    do_fork: T
                  )
              )
            }
          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 '$('>
                child: 
                  (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: 
            (condition.Shell
              commands: [
                (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'))})
      ]
    )
  ]
)