(command.CommandList
  children: [
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_Pound '$#'))} 
                  {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (2))} {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:55)
            )
          ]
          action: [
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (C {(echo)} 
                      {
                        (DQ ('\n') ('Usage: ') 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:68)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (' <size> <path>\n') ('\n') ('Truncate the <path> to exactly <size> bytes.\n') ('\n') 
                          ("If <path> doesn't exist it is created.\n") ('\n') ('<size> is a number which may be optionally followed\n') 
                          ('by the following multiplicative suffixes:\n') ('  b              512\n') ('  KB            1000\n') ('  K             1024\n') 
                          ('  MB       1000*1000\n') ('  M        1024*1024\n') ('and so on for G, T, P, E, Z, Y\n') ('\n') 
                          ('If the file previously was larger than this size, the extra data is\n') ('lost. If the file previously was shorter, it is extended\n') 
                          ('and the extended part reads as zero bytes. Note in both cases\n') ('no data is written (if the filesystem supports holes in files).\n') ('\n') 
                          ('E.G.: truncate 2TB ext3.test\n')
                        )
                      }
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:101)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:105)
              arg_word: {(1)}
            )
          ]
          spids: [39 57]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:size)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [112]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:file)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$2'))}
          spids: [115]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:error)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:122)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [
                          {(dd)}
                          {(Id.Lit_VarLike 'bs=') (1)}
                          {(Id.Lit_VarLike 'seek=') ($ Id.VSub_DollarName '$size')}
                          {(Id.Lit_VarLike 'if=') (/dev/null)}
                          {(Id.Lit_VarLike 'of=') (DQ ($ Id.VSub_DollarName '$file'))}
                        ]
                        redirects: [
                          (redir.Redir
                            op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:141)
                            fd: 2
                            arg_word: {(1)}
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [121]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ret)
          op: assign_op.Equal
          rhs: {($ Id.VSub_QMark '$?')}
          spids: [145]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(echo)} {(DQ ($ Id.VSub_DollarName '$error'))})
        (command.Simple
          words: [{(grep)} {(-v)} {(DQ ('^0'))}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:164)
              fd: -1
              arg_word: {(2)}
            )
          ]
        )
      ]
      negated: F
    )
    (command.ControlFlow
      token: (Token id:Id.ControlFlow_Exit val:exit span_id:167)
      arg_word: {($ Id.VSub_DollarName '$ret')}
    )
  ]
)