(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PATH)
          op: assign_op.Equal
          rhs: {(Id.Lit_Other ':') (/bin) (Id.Lit_Other ':') (/usr/bin)}
          spids: [8]
        )
      ]
    )
    (C {(export)} {(PATH)})
    (C {(echo)} {(-n)} {(DQ ('Shell test  1 '))})
    (C {(rm)} {(-rf)} {(DIR_SH1)})
    (C {(mkdir)} {(DIR_SH1)})
    (C {(cd)} {(DIR_SH1)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:f)
          op: assign_op.Equal
          rhs: {(../test1.c)}
          spids: [42]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-r)} {($ Id.VSub_DollarName '$f')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:52)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:58)
            )
          ]
          spids: [45 54]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(sh1)} {(cannot)} {(read)} {($ Id.VSub_DollarName '$f')})
          terminator: (Token id:Id.Op_Semi val:';' span_id:71)
        )
        (command.Sentence
          child: 
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:73)
              arg_word: {(1)}
            )
          terminator: (Token id:Id.Op_Semi val:';' span_id:76)
        )
      ]
    )
    (command.Simple
      words: [{(echo)} {(DQ (abcdefghijklmnopqrstuvwxyz))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:90) fd:-1 arg_word:{(alpha)})
      ]
    )
    (command.Simple
      words: [{(echo)} {(DQ (ABCDEFGHIJKLMNOPQRSTUVWXYZ))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:99) fd:-1 arg_word:{(ALPHA)})
      ]
    )
    (command.Simple
      words: [{(echo)} {(DQ (0123456789))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:108) fd:-1 arg_word:{(num)})]
    )
    (command.Simple
      words: [{(echo)} {(DQ ('!@#') (Id.Lit_Other '$') ('%^&*()_+=-{}[]:;<>?/.,'))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:119)
          fd: -1
          arg_word: {(special)}
        )
      ]
    )
    (C {(cp)} {(/etc/rc)} {(rc)})
    (C {(cp)} {(/etc/passwd)} {(passwd)})
    (command.Simple
      words: [{(cat)} {(alpha)} {(ALPHA)} {(num)} {(rc)} {(passwd)} {(special)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:148) fd:-1 arg_word:{(tmp)})]
    )
    (command.Simple
      words: [{(cat)} {(tmp)} {(tmp)} {(tmp)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:159) fd:-1 arg_word:{(f1)})]
    )
    (C {(mkdir)} {(foo)})
    (C {(cp)} {(/etc/rc)} {(/etc/passwd)} {(foo)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(foo/rc)} {(/etc/rc)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:189)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:195)
            )
          ]
          spids: [179 191]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(cp)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:210)
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(foo/passwd)} {(/etc/passwd)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:224)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:230)
            )
          ]
          spids: [214 226]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(cp)} {(test)} {(2)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:245)
        )
      ]
    )
    (C {(rm)} {(-rf)} {(foo)})
    (command.Simple
      words: [{(cat)} {(num)} {(num)} {(num)} {(num)} {(num)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:271) fd:-1 arg_word:{(y)})]
    )
    (command.Simple
      words: [{(wc)} {(-c)} {(y)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:280) fd:-1 arg_word:{(x1)})]
    )
    (command.Simple
      words: [{(echo)} {(DQ ('     55 y'))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:289) fd:-1 arg_word:{(x2)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x1)} {(x2)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:301)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:307)
            )
          ]
          spids: [292 303]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(cat)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:322)
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:328) fd:-1 arg_word:{(y)})
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:331) fd:-1 arg_word:{(z)})
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(y)} {(z)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:343)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:349)
            )
          ]
          spids: [334 345]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(cat)} {(test)} {(2)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:364)
        )
      ]
    )
    (command.Simple
      words: [{(cat)} {(passwd)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:376) fd:-1 arg_word:{(p)})]
    )
    (C {(cp)} {(passwd)} {(q)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(p)} {(q)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:394)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:400)
            )
          ]
          spids: [385 396]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(ar)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:415)
        )
      ]
    )
    (command.Simple
      words: [{(date)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:421) fd:-1 arg_word:{(r)})]
    )
    (command.Simple
      words: [{(ar)} {(r)} {(x.a)} {(p)} {(q)} {(r)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'2>' span_id:436)
          fd: 2
          arg_word: {(/dev/null)}
        )
      ]
    )
    (C {(ar)} {(r)} {(x.a)} {(/usr/bin/cp)})
    (C {(ar)} {(r)} {(x.a)} {(/usr/bin/cat)})
    (C {(rm)} {(p)} {(q)})
    (C {(mv)} {(r)} {(R)})
    (C {(ar)} {(x)} {(x.a)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(p)} {(/etc/passwd)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:482)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:488)
            )
          ]
          spids: [473 484]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(Error)} {(on)} {(ar)} {(test)} {(2)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:501)
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(q)} {(/etc/passwd)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:514)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:520)
            )
          ]
          spids: [505 516]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(Error)} {(on)} {(ar)} {(test)} {(3)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:533)
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(r)} {(R)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:546)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:552)
            )
          ]
          spids: [537 548]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(Error)} {(on)} {(ar)} {(test)} {(4)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:565)
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(cp)} {(/usr/bin/cp)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:578)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:584)
            )
          ]
          spids: [569 580]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(Error)} {(on)} {(ar)} {(test)} {(5)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:597)
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(cat)} {(/usr/bin/cat)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:610)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:616)
            )
          ]
          spids: [601 612]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(Error)} {(on)} {(ar)} {(test)} {(6)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:629)
        )
      ]
    )
    (C {(rm)} {(cp)} {(cat)} {(p)} {(q)} {(r)})
    (command.Simple
      words: [{(ar)} {(d)} {(x.a)} {(r)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:653)
          fd: -1
          arg_word: {(/dev/null)}
        )
      ]
    )
    (C {(ar)} {(x)} {(x.a)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-r)} {(r)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:669)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(ar)} {(test)} {(7)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:684)
            )
          ]
          spids: [662 671]
        )
      ]
    )
    (C {(rm)} {(-rf)} {(p)} {(q)} {(r)} {(R)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {(test)} 
              {
                (command_sub
                  left_token: (Token id:Id.Left_Backtick val:'`' span_id:708)
                  command_list: 
                    (command.CommandList
                      children: [(C {(basename)} {(/usr/ast/foo.c)} {(.c)})]
                    )
                )
              } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(SQ (Token id:Id.Lit_Chars val:foo span_id:722))}
            )
          ]
          action: [(C {(echo)} {(Error)} {(on)} {(basename)} {(test)} {(1)})]
          spids: [704 726]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(test)} 
                  {
                    (command_sub
                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:747)
                      command_list: (command.CommandList children:[(C {(basename)} {(a/b/c/d)})])
                    )
                  } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(SQ (Token id:Id.Lit_Chars val:d span_id:759))}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:761)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Error)} {(on)} {(basename)} {(test)} {(2)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:774)
            )
          ]
          spids: [743 763]
        )
      ]
    )
    (C {(cp)} {($ Id.VSub_DollarName '$f')} {(x.c)})
    (command.Simple
      words: [{(echo)} {(DQ ('/a/s//#####/g'))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:797) fd:-1 arg_word:{(s)})]
    )
    (command.Simple
      words: [{(sed)} {(-f)} {(s)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:809) fd:-1 arg_word:{(x.c)})
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:812) fd:-1 arg_word:{(y.c)})
      ]
    )
    (command.Simple
      words: [{(cdiff)} {(x.c)} {(y.c)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:824) fd:-1 arg_word:{(y)})]
    )
    (command.Simple
      words: [{(patch)} {(x.c)} {(y)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'2>' span_id:836)
          fd: 2
          arg_word: {(/dev/null)}
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x.c)} {(y.c)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:851)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:857)
            )
          ]
          spids: [842 853]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(Id.KW_In in)} {(cdiff)} {(test)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:870)
        )
      ]
    )
    (C {(rm)} {(x.c) (Id.Lit_Star '*')} {(y.c)} {(s)} {(y)})
    (command.Simple
      words: [{(ls)} {(/etc)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:893) fd:-1 arg_word:{(x)})]
    )
    (command.Simple
      words: [{(grep)} {(-v)} {(DQ (passwd))} {(x)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:909) fd:-1 arg_word:{(y)})]
    )
    (command.Simple
      words: [{(comm)} {(-3)} {(x)} {(y)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:923) fd:-1 arg_word:{(z)})]
    )
    (command.Simple
      words: [{(echo)} {(DQ (passwd))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:935) fd:-1 arg_word:{(w)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(w)} {(z)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:947)
            )
          ]
          action: [
            (command.Sentence
              child: 
                (C {(Id.Lit_Other ':')} {(Id.KW_Else else)} {(echo)} {(Error)} {(on)} {(comm)} {(test)} {(1)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:966)
            )
          ]
          spids: [938 949]
        )
      ]
    )
    (command.Simple
      words: [{(comm)} {(-13)} {(x)} {(y)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:979) fd:-1 arg_word:{(z)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-s)} {(z)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:992)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(comm)} {(test)} {(2)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1007)
            )
          ]
          spids: [985 994]
        )
      ]
    )
    (C {(rm)} {(-rf)} {(w)} {(x)} {(y)} {(z)})
    (command.Simple
      words: [{(compress)} {(-fc)} {($ Id.VSub_DollarName '$f')}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1033)
          fd: -1
          arg_word: {(x.c.Z)}
        )
      ]
    )
    (command.Simple
      words: [{(compress)} {(-cd)} {(x.c.Z)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1045) fd:-1 arg_word:{(y)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {($ Id.VSub_DollarName '$f')} {(y)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1060)
            )
          ]
          action: [
            (command.Sentence
              child: 
                (C {(Id.Lit_Other ':')} {(Id.KW_Else else)} {(echo)} {(Error)} {(Id.KW_In in)} {(compress)} 
                  {(test)} {(1)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1079)
            )
          ]
          spids: [1051 1062]
        )
      ]
    )
    (C {(rm)} {(-rf)} {(x.c.Z)} {(y)})
    (C {(cp)} {($ Id.VSub_DollarName '$f')} {(x)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1106) fd:-1 arg_word:{(y)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1109)
          fd: -1
          here_begin: {(END)}
          here_end_span_id: 1118
          stdin_parts: [('g/a/s//#####/g\n') ('g/b/s//@@@@@/g\n') ('g/c/s//!!!!!/g\n') ('w\n') ('q\n')]
        )
      ]
    )
    (command.Simple
      words: [{(ed)} {(x)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:1123) fd:-1 arg_word:{(y)})
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1126)
          fd: -1
          arg_word: {(/dev/null)}
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1131) fd:-1 arg_word:{(y)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1134)
          fd: -1
          here_begin: {(END)}
          here_end_span_id: 1143
          stdin_parts: [('g/#####/s//a/g\n') ('g/@@@@@/s//b/g\n') ('g/!!!!!/s//c/g\n') ('w\n') ('q\n')]
        )
      ]
    )
    (command.Simple
      words: [{(ed)} {(x)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:1148) fd:-1 arg_word:{(y)})
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1151)
          fd: -1
          arg_word: {(/dev/null)}
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x)} {($ Id.VSub_DollarName '$f')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1163)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1169)
            )
          ]
          spids: [1154 1165]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(Id.KW_In in)} {(ed)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:1184)
        )
      ]
    )
    (C {(rm)} {(x)} {(y)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(test)} 
                  {
                    (command_sub
                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:1202)
                      command_list: 
                        (command.CommandList
                          children: [(C {(expr)} {(1)} {(Id.Lit_Other '+')} {(1)})]
                        )
                    )
                  } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(2)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1218)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(expr)} {(test)} {(1)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1233)
            )
          ]
          spids: [1198 1220]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(test)} 
                  {
                    (command_sub
                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:1241)
                      command_list: 
                        (command.CommandList
                          children: [(C {(expr)} {(10000)} {(-)} {(1)})]
                        )
                    )
                  } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(9999)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1257)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(expr)} {(test)} {(2)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1272)
            )
          ]
          spids: [1237 1259]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(test)} 
                  {
                    (command_sub
                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:1280)
                      command_list: 
                        (command.CommandList
                          children: [
                            (C {(expr)} {(100)} {(SQ (Token id:Id.Lit_Chars val:'*' span_id:1288))} 
                              {(50)}
                            )
                          ]
                        )
                    )
                  } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(5000)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1298)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(expr)} {(test)} {(3)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1313)
            )
          ]
          spids: [1276 1300]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(test)} 
                  {
                    (command_sub
                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:1321)
                      command_list: (command.CommandList children:[(C {(expr)} {(120)} {(/)} {(5)})])
                    )
                  } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(24)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1337)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(expr)} {(test)} {(4)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1352)
            )
          ]
          spids: [1317 1339]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(test)} 
                  {
                    (command_sub
                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:1360)
                      command_list: 
                        (command.CommandList
                          children: [(C {(expr)} {(143)} {(Id.Lit_Other '%')} {(7)})]
                        )
                    )
                  } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(3)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1376)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(expr)} {(test)} {(5)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1391)
            )
          ]
          spids: [1356 1378]
        )
      ]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:a) op:assign_op.Equal rhs:{(100)} spids:[1395])]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:1399)
                command_list: 
                  (command.CommandList
                    children: [(C {(expr)} {($ Id.VSub_DollarName '$a')} {(Id.Lit_Other '+')} {(1)})]
                  )
              )
            }
          spids: [1398]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(test)} {($ Id.VSub_DollarName '$a')} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} 
                  {(SQ (Token id:Id.Lit_Chars val:101 span_id:1421))}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1423)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(expr)} {(test)} {(6)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1438)
            )
          ]
          spids: [1411 1425]
        )
      ]
    )
    (command.Simple
      words: [{(fgrep)} {(DQ (abc))} {(alpha)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1454) fd:-1 arg_word:{(z)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(alpha)} {(z)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1467)
            )
          ]
          action: [
            (command.Sentence
              child: 
                (C {(Id.Lit_Other ':')} {(Id.KW_Else else)} {(echo)} {(Error)} {(on)} {(fgrep)} {(test)} 
                  {(1)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1486)
            )
          ]
          spids: [1457 1469]
        )
      ]
    )
    (command.Simple
      words: [{(fgrep)} {(DQ (abc))} {(num)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1498) fd:-1 arg_word:{(z)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-s)} {(z)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1508)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(fgrep)} {(test)} {(2)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1523)
            )
          ]
          spids: [1501 1510]
        )
      ]
    )
    (command.Simple
      words: [{(cat)} {(alpha)} {(num)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1533) fd:-1 arg_word:{(z)})]
    )
    (command.Simple
      words: [{(fgrep)} {(DQ (012))} {(z)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1544) fd:-1 arg_word:{(w)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(w)} {(num)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1556)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1562)
            )
          ]
          spids: [1547 1558]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(fgrep)} {(test)} {(3)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:1575)
        )
      ]
    )
    (command.Simple
      words: [{(date)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1586)
          fd: -1
          arg_word: {(Rabbit)}
        )
      ]
    )
    (command.Simple
      words: [{(echo)} {(DQ (Rabbit))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1595) fd:-1 arg_word:{(y)})]
    )
    (command.Simple
      words: [{(find)} {(.)} {(-name)} {(Rabbit)} {(-print)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1608) fd:-1 arg_word:{(z)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(y)} {(z)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1620)
            )
          ]
          action: [
            (command.Sentence
              child: 
                (C {(Id.Lit_Other ':')} {(Id.KW_Else else)} {(echo)} {(Error)} {(on)} {(find)} {(test)} {(1)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1639)
            )
          ]
          spids: [1611 1622]
        )
      ]
    )
    (command.Simple
      words: [{(find)} {(.)} {(-name)} {(Bunny)} {(-print)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1653) fd:-1 arg_word:{(z)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-s)} {(z)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1663)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(find)} {(test)} {(2)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1678)
            )
          ]
          spids: [1656 1665]
        )
      ]
    )
    (C {(rm)} {(Rabbit)} {(y)} {(z)})
    (command.Simple
      words: [{(grep)} {(DQ (a))} {(alpha)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1702) fd:-1 arg_word:{(x)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x)} {(alpha)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1714)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1720)
            )
          ]
          spids: [1705 1716]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(grep)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:1735)
        )
      ]
    )
    (command.Simple
      words: [{(grep)} {(DQ (a))} {(ALPHA)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1747) fd:-1 arg_word:{(x)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-s)} {(x)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1757)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(grep)} {(test)} {(2)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1772)
            )
          ]
          spids: [1750 1759]
        )
      ]
    )
    (command.Simple
      words: [{(grep)} {(-v)} {(DQ (0))} {(alpha)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1786) fd:-1 arg_word:{(x)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x)} {(alpha)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1798)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1804)
            )
          ]
          spids: [1789 1800]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(grep)} {(test)} {(3)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:1819)
        )
      ]
    )
    (command.Simple
      words: [{(grep)} {(-s)} {(DQ (a))} {(alpha)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1833) fd:-1 arg_word:{(x)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-s)} {(x)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1843)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(grep)} {(test)} {(4)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1858)
            )
          ]
          spids: [1836 1845]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.Simple
                  words: [{(grep)} {(-s)} {(DQ (a))} {(alpha)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:1874)
                      fd: -1
                      arg_word: {(x)}
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1876)
            )
          ]
          action: [
            (command.Sentence
              child: 
                (C {(Id.Lit_Other ':')} {(Id.KW_Else else)} {(echo)} {(Error)} {(on)} {(grep)} {(test)} {(5)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1895)
            )
          ]
          spids: [1862 1878]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.Simple
                  words: [{(grep)} {(-s)} {(DQ (a))} {(ALPHA)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:1911)
                      fd: -1
                      arg_word: {(x)}
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1913)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(grep)} {(test)} {(6)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1928)
            )
          ]
          spids: [1899 1915]
        )
      ]
    )
    (command.Simple
      words: [{(head)} {(-1)} {(f1)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1942) fd:-1 arg_word:{(x)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x)} {(alpha)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1954)
            )
          ]
          action: [
            (command.Sentence
              child: 
                (C {(Id.Lit_Other ':')} {(Id.KW_Else else)} {(echo)} {(Error)} {(on)} {(head)} {(test)} {(1)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1973)
            )
          ]
          spids: [1945 1956]
        )
      ]
    )
    (command.Simple
      words: [{(head)} {(-2)} {(f1)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1983) fd:-1 arg_word:{(x)})]
    )
    (command.Simple
      words: [{(cat)} {(alpha)} {(ALPHA)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:1992) fd:-1 arg_word:{(y)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x)} {(y)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2004)
            )
          ]
          action: [
            (command.Sentence
              child: 
                (C {(Id.Lit_Other ':')} {(Id.KW_Else else)} {(echo)} {(Error)} {(on)} {(head)} {(test)} {(2)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2023)
            )
          ]
          spids: [1995 2006]
        )
      ]
    )
    (C {(mkdir)} {(FOO)})
    (C {(cp)} {(passwd)} {(FOO/z)})
    (C {(cp)} {(alpha)} {(FOO/x)})
    (C {(cp)} {(ALPHA)} {(FOO/y)})
    (C {(cd)} {(FOO)})
    (command.Simple
      words: [{(ls)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2059) fd:-1 arg_word:{(w)})]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2064) fd:-1 arg_word:{(w1)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2067)
          fd: -1
          here_begin: {(END)}
          here_end_span_id: 2075
          stdin_parts: [('w\n') ('x\n') ('y\n') ('z\n')]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(w)} {(w1)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2085)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2091)
            )
          ]
          spids: [2076 2087]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(ls)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2106)
        )
      ]
    )
    (C {(rm)} {(Id.Lit_Star '*')})
    (C {(cd)} {(..)})
    (C {(rmdir)} {(FOO)})
    (C {(mkdir)} {(Foo)} {(Bar)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-d)} {(Foo)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2139)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2145)
            )
          ]
          spids: [2132 2141]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(mkdir)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2160)
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-d)} {(Bar)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2171)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2177)
            )
          ]
          spids: [2164 2173]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(mkdir)} {(test)} {(2)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2192)
        )
      ]
    )
    (C {(rmdir)} {(Foo)} {(Bar)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-d)} {(Foo)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2209)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(mkdir)} {(test)} {(3)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2224)
            )
          ]
          spids: [2202 2211]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-d)} {(Foo)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2235)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(rmdir)} {(test)} {(4)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2250)
            )
          ]
          spids: [2228 2237]
        )
      ]
    )
    (C {(mkdir)} {(MVDIR)})
    (C {(cp)} {($ Id.VSub_DollarName '$f')} {(x)})
    (C {(mv)} {(x)} {(y)})
    (C {(mv)} {(y)} {(z)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {($ Id.VSub_DollarName '$f')} {(z)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2289)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2295)
            )
          ]
          spids: [2280 2291]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(mv)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2310)
        )
      ]
    )
    (C {(cp)} {($ Id.VSub_DollarName '$f')} {(x)})
    (C {(mv)} {(x)} {(MVDIR/y)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {($ Id.VSub_DollarName '$f')} {(MVDIR/y)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2335)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2341)
            )
          ]
          spids: [2326 2337]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(mv)} {(test)} {(2)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2356)
        )
      ]
    )
    (command.Pipeline
      children: [
        (command.Simple
          words: [{(rev)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Less val:'<' span_id:2366)
              fd: -1
              arg_word: {(f1)}
            )
          ]
        )
        (command.Simple
          words: [{(head)} {(-1)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:2375)
              fd: -1
              arg_word: {(ahpla)}
            )
          ]
        )
      ]
      negated: F
    )
    (command.Simple
      words: [{(echo)} {(DQ (zyxwvutsrqponmlkjihgfedcba))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2384) fd:-1 arg_word:{(x)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x)} {(ahpla)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2396)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2402)
            )
          ]
          spids: [2387 2398]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(rev)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2417)
        )
      ]
    )
    (command.Simple
      words: [{(rev)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Less val:'<' span_id:2423)
          fd: -1
          arg_word: {($ Id.VSub_DollarName '$f')}
        )
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2426) fd:-1 arg_word:{(x)})
      ]
    )
    (command.Simple
      words: [{(rev)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:2431) fd:-1 arg_word:{(x)})
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2434) fd:-1 arg_word:{(y)})
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {($ Id.VSub_DollarName '$f')} {(x)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2446)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(echo)} {(Error)} {(on)} {(rev)} {(test)} {(2)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2461)
            )
          ]
          spids: [2437 2448]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {($ Id.VSub_DollarName '$f')} {(y)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2474)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2480)
            )
          ]
          spids: [2465 2476]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(error)} {(on)} {(rev)} {(test)} {(3)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2495)
        )
      ]
    )
    (C {(cp)} {($ Id.VSub_DollarName '$f')} {(w)})
    (C {(cp)} {(alpha)} {(x)})
    (C {(cp)} {(ALPHA)} {(y)})
    (C {(cp)} {(num)} {(z)})
    (command.Simple
      words: [{(shar)} {(w)} {(x)} {(y)} {(z)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2537) fd:-1 arg_word:{(x1)})]
    )
    (C {(rm)} {(w)} {(x)} {(y)} {(z)})
    (command.Simple
      words: [{(sh)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:2552) fd:-1 arg_word:{(x1)})
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2555)
          fd: -1
          arg_word: {(/dev/null)}
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(w)} {($ Id.VSub_DollarName '$f')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2567)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2573)
            )
          ]
          spids: [2558 2569]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(shar)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2588)
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x)} {(alpha)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2601)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2607)
            )
          ]
          spids: [2592 2603]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(shar)} {(test)} {(2)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2622)
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(y)} {(ALPHA)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2635)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2641)
            )
          ]
          spids: [2626 2637]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(shar)} {(test)} {(3)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2656)
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(z)} {(num)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2669)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2675)
            )
          ]
          spids: [2660 2671]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(shar)} {(test)} {(4)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2690)
        )
      ]
    )
    (command.Simple
      words: [{(sort)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Less val:'<' span_id:2700)
          fd: -1
          arg_word: {($ Id.VSub_DollarName '$f')}
        )
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2703) fd:-1 arg_word:{(x)})
      ]
    )
    (command.Simple
      words: [{(wc)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Less val:'<' span_id:2708)
          fd: -1
          arg_word: {($ Id.VSub_DollarName '$f')}
        )
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2711) fd:-1 arg_word:{(x1)})
      ]
    )
    (command.Simple
      words: [{(wc)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:2716) fd:-1 arg_word:{(x)})
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2719) fd:-1 arg_word:{(x2)})
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x1)} {(x2)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2731)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2737)
            )
          ]
          spids: [2722 2733]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(sort)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2752)
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2758) fd:-1 arg_word:{(x)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2761)
          fd: -1
          here_begin: {(END)}
          here_end_span_id: 2770
          stdin_parts: [('demit 10\n') ('epitonic 40\n') ('apoop 20\n') ('bibelot 3\n') ('comate 4\n')]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2773) fd:-1 arg_word:{(y)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2776)
          fd: -1
          here_begin: {(END)}
          here_end_span_id: 2785
          stdin_parts: [('apoop 20\n') ('bibelot 3\n') ('comate 4\n') ('demit 10\n') ('epitonic 40\n')]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2788) fd:-1 arg_word:{(z)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2791)
          fd: -1
          here_begin: {(END)}
          here_end_span_id: 2800
          stdin_parts: [('epitonic 40\n') ('demit 10\n') ('comate 4\n') ('bibelot 3\n') ('apoop 20\n')]
        )
      ]
    )
    (command.Simple
      words: [{(sort)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:2803) fd:-1 arg_word:{(x)})
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2806) fd:-1 arg_word:{(x1)})
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(y)} {(x1)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2818)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2824)
            )
          ]
          spids: [2809 2820]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(sort)} {(test)} {(2)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2839)
        )
      ]
    )
    (command.Simple
      words: [{(sort)} {(-r)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:2847) fd:-1 arg_word:{(x1)})
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2850) fd:-1 arg_word:{(x2)})
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x2)} {(z)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2862)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2868)
            )
          ]
          spids: [2853 2864]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(sort)} {(test)} {(3)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2883)
        )
      ]
    )
    (command.Pipeline
      children: [
        (command.Simple
          words: [{(sort)} {(Id.Lit_Other '+') (1)} {(-n)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Less val:'<' span_id:2894)
              fd: -1
              arg_word: {(x)}
            )
          ]
        )
        (command.Simple
          words: [{(head)} {(-1)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:2902)
              fd: -1
              arg_word: {(y)}
            )
          ]
        )
      ]
      negated: F
    )
    (command.Simple
      words: [{(echo)} {(DQ ('bibelot 3'))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2911) fd:-1 arg_word:{(z)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(y)} {(z)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2923)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2929)
            )
          ]
          spids: [2914 2925]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(sort)} {(test)} {(4)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2944)
        )
      ]
    )
    (command.Simple
      words: [{(tail)} {(-1)} {(f1)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:2958) fd:-1 arg_word:{(x)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x)} {(special)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2970)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:2976)
            )
          ]
          spids: [2961 2972]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(tail)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:2991)
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:3001) fd:-1 arg_word:{(x)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:3004)
          fd: -1
          here_begin: {(END)}
          here_end_span_id: 3021
          stdin_parts: [
            ('a d\n')
            ('b e\n')
            ('c f\n')
            ('a c\n')
            ('p z\n')
            ('k p\n')
            ('a k\n')
            ('a b\n')
            ('b c\n')
            ('c d\n')
            ('d e\n')
            ('e f\n')
            ('f k\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:3024)
          fd: -1
          arg_word: {(answer)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:3027)
          fd: -1
          here_begin: {(END)}
          here_end_span_id: 3040
          stdin_parts: [('a\n') ('b\n') ('c\n') ('d\n') ('e\n') ('f\n') ('k\n') ('p\n') ('z\n')]
        )
      ]
    )
    (command.Simple
      words: [{(tsort)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:3043) fd:-1 arg_word:{(x)})
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:3046) fd:-1 arg_word:{(y)})
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(y)} {(answer)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:3058)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:3064)
            )
          ]
          spids: [3049 3060]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(tsort)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:3079)
        )
      ]
    )
    (C {(cp)} {($ Id.VSub_DollarName '$f')} {(x)})
    (C {(uue)} {(x)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-s)} {(x.uue)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:3104)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:3110)
            )
          ]
          spids: [3097 3106]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(uue/uud)} {(test)} {(1)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:3125)
        )
      ]
    )
    (C {(rm)} {(x)})
    (C {(uud)} {(x.uue)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x)} {($ Id.VSub_DollarName '$f')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:3146)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:3152)
            )
          ]
          spids: [3137 3148]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(uue/uud)} {(test)} {(2)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:3167)
        )
      ]
    )
    (command.Simple
      words: [{(compress)} {(-fc)} {(x)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:3178) fd:-1 arg_word:{(x.Z)})
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'2>' span_id:3181)
          fd: 2
          arg_word: {(/dev/null)}
        )
      ]
    )
    (C {(uue)} {(x.Z)})
    (C {(rm)} {(x)} {(x.Z)})
    (C {(uud)} {(x.uue)})
    (command.Simple
      words: [{(compress)} {(-cd)} {(x.Z)}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:3204) fd:-1 arg_word:{(x)})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(cmp)} {(-s)} {(x)} {($ Id.VSub_DollarName '$f')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:3216)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(Id.Lit_Other ':')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:3222)
            )
          ]
          spids: [3207 3218]
        )
      ]
      else_action: [
        (command.Sentence
          child: (C {(echo)} {(Error)} {(on)} {(uue/uud)} {(test)} {(3)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:3237)
        )
      ]
    )
    (C {(cd)} {(..)})
    (C {(rm)} {(-rf)} {(DIR_SH1)})
    (C {(echo)} {(ok)})
  ]
)