(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:num)
          op: assign_op.Equal
          rhs: {(DQ <20>)}
          spids: [60]
        )
      ]
    )
    (command.ShFunction
      name: usage
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [
                {<echo>}
                {
                  (DQ <'Usage: '> 
                    (command_sub
                      left_token: <Id.Left_Backtick '`'>
                      child: (C {<basename>} {($ Id.VSub_Number '$0')})
                    ) <' [-nr] [-na] [-n#] [-s] [-r] [path...]'>
                  )
                }
              ]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.Simple
              words: [{<echo>}]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.Simple
              words: [{<echo>} {(DQ <'    -nr    do not recurse'>)}]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.Simple
              words: [{<echo>} {(DQ <'    -na    ignore files starting with .'>)}]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.Simple
              words: [
                {<echo>}
                {
                  (DQ <'    -n#    list the newest # files ('> ($ Id.VSub_DollarName '$num') 
                    <' by default)'>
                  )
                }
              ]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.Simple
              words: [{<echo>} {(DQ <'    -r     reverse to show oldest files'>)}]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:num)
          op: assign_op.Equal
          rhs: {(DQ <-n> ($ Id.VSub_DollarName '$num'))}
          spids: [146]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:dotfiles)
          op: assign_op.Equal
          rhs: {(DQ <yes>)}
          spids: [152]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:recurse)
          op: assign_op.Equal
          rhs: {(DQ <yes>)}
          spids: [157]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:reverse)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [162]
        )
      ]
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: (condition.Shell commands:[(C {<Id.Lit_Colon ':'>})])
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_Number '$1'))}
              arms: [
                (case_arm
                  pat_list: [{<-->}]
                  action: [
                    (command.Sentence
                      child: (C {<shift>})
                      terminator: <Id.Op_Semi _>
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Break break>)
                  ]
                  spids: [182 183 190 -1]
                )
                (case_arm
                  pat_list: [{<-na>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dotfiles)
                          op: assign_op.Equal
                          rhs: {(DQ <no>)}
                          spids: [196]
                        )
                      ]
                    )
                  ]
                  spids: [193 194 201 -1]
                )
                (case_arm
                  pat_list: [{<-nr>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:recurse)
                          op: assign_op.Equal
                          rhs: {(DQ <no>)}
                          spids: [207]
                        )
                      ]
                    )
                  ]
                  spids: [204 205 212 -1]
                )
                (case_arm
                  pat_list: [
                    {<-n> <Id.Lit_LBracket '['> <0-9> <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>}
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:num)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [222]
                        )
                      ]
                    )
                  ]
                  spids: [215 220 225 -1]
                )
                (case_arm
                  pat_list: [{<-r>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:reverse)
                          op: assign_op.Equal
                          rhs: {(DQ <r>)}
                          spids: [231]
                        )
                      ]
                    )
                  ]
                  spids: [228 229 236 -1]
                )
                (case_arm
                  pat_list: [{<--help>}]
                  action: [(C {<usage>})]
                  spids: [239 240 244 -1]
                )
                (case_arm
                  pat_list: [{<--version>}]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<echo>} {(DQ <1.1>)})
                        (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
                      ]
                    )
                  ]
                  spids: [247 248 260 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)]
                  spids: [263 264 268 -1]
                )
              ]
            )
            (C {<shift>})
          ]
        )
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$dotfiles'))} {<Id.Lit_Equals '='>} 
          {(DQ <no>)} {<Id.Lit_RBracket ']'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:ignore_hidden)
              op: assign_op.Equal
              rhs: {(DQ <'-name \'.*\' -o'>)}
              spids: [294]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$recurse'))} {<Id.Lit_Equals '='>} 
          {(DQ <no>)} {<Id.Lit_RBracket ']'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:dont_recurse)
              op: assign_op.Equal
              rhs: {(DQ <'-maxdepth 1'>)}
              spids: [315]
            )
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-gt>} {<0>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:path_format)
                  op: assign_op.Equal
                  rhs: {(DQ <'%p'>)}
                  spids: [336]
                )
              ]
            )
          ]
          spids: [320 333]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:path_format)
              op: assign_op.Equal
              rhs: {(DQ <'%P'>)}
              spids: [344]
            )
          ]
        )
        (C {<set>} {<-->} {(DQ <'./'>)})
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ignore_metadata)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <Id.Lit_BadBackslash '\\'> <'( -type d -a '> <Id.Lit_BadBackslash '\\'> 
                <'( -name \'.git\' -o -name \'.svn\' -o -name \'CVS\' '> <Id.Lit_BadBackslash '\\'> <') '> <Id.Lit_BadBackslash '\\'> <') -prune -o'>
              )
            }
          spids: [361]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:print_format)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <Id.Lit_BadBackslash '\\'> <'( -type f -printf \'%T@'> <Id.Lit_BadBackslash '\\'> <t> 
                ($ Id.VSub_DollarName '$path_format') <Id.Lit_BadBackslash '\\'> <'n\' '> <Id.Lit_BadBackslash '\\'> <')'>
              )
            }
          spids: [373]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {<eval>} {<find>} {(SQ <'"$@"'>)} {($ Id.VSub_DollarName '$dont_recurse')} 
          {($ Id.VSub_DollarName '$ignore_metadata')} {($ Id.VSub_DollarName '$ignore_hidden')} {($ Id.VSub_DollarName '$print_format')}
        )
        (C {<sort>} {<-k1> <Id.Lit_Comma ','> <1> (${ Id.VSub_Name reverse) <n>})
        (C {<tail>} {($ Id.VSub_DollarName '$num')})
        (C {<cut>} {<-f2->})
        (command.If
          arms: [
            (if_arm
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-p>} {<'/proc/self/fd/1'>} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              action: [
                (command.Pipeline
                  children: [
                    (C {<tr>} {(SQ <'\\n'>)} {(SQ <'\\0'>)})
                    (C {<xargs>} {<-r0>} {<ls>} {<-lUd>} {<--color> <Id.Lit_Equals '='> <auto>} {<-->})
                  ]
                  negated: F
                )
              ]
              spids: [428 441]
            )
          ]
          else_action: [(C {<cat>})]
        )
      ]
      negated: F
    )
  ]
)