(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BZIP)
          op: assign_op.Equal
          rhs: {<'/usr/local/bin/bzip2'>}
          spids: [3]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:RM)
          op: assign_op.Equal
          rhs: {(DQ <'rm -f'>)}
          spids: [6]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MV)
          op: assign_op.Equal
          rhs: {(DQ <'mv -f'>)}
          spids: [11]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-ne>} {<2>} {<Id.Lit_RBracket ']'>})
              ]
            )
          action: [
            (C {<echo>} {(DQ <'Usage: '> ($ Id.VSub_Number '$0') <' <log> <keep>'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [17 29]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {(DQ ($ Id.VSub_Number '$1'))} 
                  {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [(command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})]
          spids: [47 61]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-x>} {(DQ ($ Id.VSub_DollarName '$BZIP'))} 
                  {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [(command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})]
          spids: [70 84]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$2'))} {<-le>} {<0>} 
                  {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'Keep at least 1 copy please.'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [93 107]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:k)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$2'))}
          spids: [123]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.Simple
          words: [
            {($ Id.VSub_DollarName '$RM')}
            {(DQ ($ Id.VSub_Number '$1') <.> ($ Id.VSub_DollarName '$k'))}
          ]
          redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
          do_fork: T
        )
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$k'))} {<-ge>} {<2>} 
              {<Id.Lit_RBracket ']'>}
            )
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:prev)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: <Id.Left_Backtick '`'>
                          child: (C {<expr>} {($ Id.VSub_DollarName '$k')} {<->} {<1>})
                        )
                      )
                    }
                  spids: [161]
                )
              ]
            )
            (command.Simple
              words: [
                {($ Id.VSub_DollarName '$MV')}
                {($ Id.VSub_Number '$1') <.> ($ Id.VSub_DollarName '$prev') <.bz2>}
                {($ Id.VSub_Number '$1') <.> ($ Id.VSub_DollarName '$k') <.bz2>}
              ]
              redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
              do_fork: T
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:k)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$prev')}
                  spids: [194]
                )
              ]
            )
          ]
        )
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.Simple
          words: [{($ Id.VSub_DollarName '$BZIP')} {<-c>} {($ Id.VSub_Number '$1')}]
          redirects: [
            (redir
              op: <Id.Redir_Great '>'>
              loc: (redir_loc.Fd fd:1)
              arg: {($ Id.VSub_Number '$1') <.1.bz2>}
            )
          ]
          do_fork: T
        )
        (command.Simple
          words: [{<Id.Lit_Colon ':'>}]
          redirects: [
            (redir
              op: <Id.Redir_Great '>'>
              loc: (redir_loc.Fd fd:1)
              arg: {($ Id.VSub_Number '$1')}
            )
          ]
          do_fork: T
        )
      ]
    )
  ]
)