(command.CommandList
  children: [
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_Pound '$#'))} {(-lt)} {(1)} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:62)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:me)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:68)
                        command_list: 
                          (command.CommandList
                            children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                          )
                      )
                    }
                  spids: [67]
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('Usage: ') ($ Id.VSub_DollarName '$me') (' size [-n] [command]'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:83)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('split data from stdin to multiple invocations of a command'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:93)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:99)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [
                {(echo)}
                {(DQ ('   -n    pass the chunk number as the first parameter to command'))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:109)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('Examples:'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:119)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('   ') ($ Id.VSub_Number '$0') (" 10000 'wc -c' < /bin/ls"))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:131)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('   ') ($ Id.VSub_Number '$0') (' 10000 < /bin/ls'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:143)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('   ') ($ Id.VSub_Number '$0') (' 10000 -n < /bin/ls'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:155)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:159)
              arg_word: {(1)}
            )
          ]
          spids: [49 64]
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:chunk_size)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [166]
                )
              ]
            )
          terminator: (Token id:Id.Op_Semi val:';' span_id:168)
        )
        (C {(shift)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(test)} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_Equals '=')} {(-n)})
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:pass_part)
                      op: assign_op.Equal
                      rhs: {(1)}
                      spids: [186]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:188)
            )
            (command.Sentence
              child: (C {(shift)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:191)
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DPipe]
      children: [
        (C {(test)} {(DQ ($ Id.VSub_Number '$1'))})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:cmd)
              op: assign_op.Equal
              rhs: {(DQ ($ Id.VSub_Star '$*'))}
              spids: [203]
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:cmd)
              op: assign_op.Equal
              rhs: {(example_cmd)}
              spids: [210]
            )
          ]
        )
      ]
    )
    (command.ShFunction
      name: example_cmd
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (C {(echo)} 
                  {
                    (DQ ('processing part ') ($ Id.VSub_Number '$1') (' (') 
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:226)
                        command_list: (command.CommandList children:[(C {(wc)} {(-c)})])
                      ) (' bytes)')
                    )
                  }
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:233)
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:part) op:assign_op.Equal rhs:{(1)} spids:[238])]
    )
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:241)
      cond: [
        (command.Sentence
          child: (C {(true)})
          terminator: (Token id:Id.Op_Semi val:';' span_id:244)
        )
      ]
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:c)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:250)
                        command_list: 
                          (command.CommandList
                            children: [(C {(od)} {(-to1)} {(-An)} {(-N1)})]
                          )
                      )
                    }
                  spids: [249]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(DQ ($ Id.VSub_DollarName '$c'))})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Break val:break span_id:272)
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:c)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:276)
                        command_list: 
                          (command.CommandList
                            children: [(C {(echo)} {($ Id.VSub_DollarName '$c')})]
                          )
                      )
                    }
                  spids: [275]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(test)} {(DQ ($ Id.VSub_DollarName '$pass_part'))})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:ppart)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$part')}
                      spids: [294]
                    )
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Pipeline
                  children: [
                    (command.BraceGroup
                      children: [
                        (C {(printf)} 
                          {
                            (DQ 
                              (word_part.EscapedLiteral
                                token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:304)
                              ) ($ Id.VSub_DollarName '$c')
                            )
                          }
                        )
                        (C {(head)} 
                          {(-c) 
                            (word_part.ArithSub
                              anode: 
                                (arith_expr.Binary
                                  op_id: Id.Arith_Minus
                                  left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$chunk_size')})
                                  right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                )
                            )
                          }
                        )
                      ]
                    )
                    (C {($ Id.VSub_DollarName '$cmd')} {($ Id.VSub_DollarName '$ppart')})
                  ]
                  negated: F
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Break val:break span_id:333)
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:part)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (word_part.ArithSub
                        anode: 
                          (arith_expr.Binary
                            op_id: Id.Arith_Plus
                            left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$part')})
                            right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                    }
                  spids: [336]
                )
              ]
            )
          ]
        )
    )
  ]
)