(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:num) op:Equal rhs:{(DQ (20))})]
    )
    (command.ShFunction
      name: usage
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [
                {(echo)}
                {
                  (DQ ('Usage: ') 
                    (command_sub
                      left_token: <Left_Backtick '`'>
                      command_list: 
                        (command.CommandList
                          children: [(C {(basename)} {($ VSub_Number '$0')})]
                        )
                    ) (' [-nr] [-na] [-n#] [-s] [-r] [path...]')
                  )
                }
              ]
              redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (command.Simple
              words: [{(echo)}]
              redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('    -nr    do not recurse'))}]
              redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('    -na    ignore files starting with .'))}]
              redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (command.Simple
              words: [
                {(echo)}
                {
                  (DQ ('    -n#    list the newest # files (') ($ VSub_DollarName '$num') 
                    (' by default)')
                  )
                }
              ]
              redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('    -r     reverse to show oldest files'))}]
              redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:num)
          op: Equal
          rhs: {(DQ (-n) ($ VSub_DollarName '$num'))}
        )
      ]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:dotfiles) op:Equal rhs:{(DQ (yes))})]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:recurse) op:Equal rhs:{(DQ (yes))})]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:reverse) op:Equal rhs:{(DQ )})]
    )
    (command.WhileUntil
      keyword: <KW_While while>
      cond: [(C {(Lit_Other ':')})]
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(DQ ($ VSub_Number '$1'))}
              arms: [
                (case_arm
                  pat_list: [{(--)}]
                  action: [
                    (command.Sentence
                      child: (C {(shift)})
                      terminator: <Op_Semi ';'>
                    )
                    (command.ControlFlow token:<ControlFlow_Break break>)
                  ]
                )
                (case_arm
                  pat_list: [{(-na)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dotfiles)
                          op: Equal
                          rhs: {(DQ (no))}
                        )
                      ]
                    )
                  ]
                )
                (case_arm
                  pat_list: [{(-nr)}]
                  action: [
                    (command.ShAssignment
                      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:recurse) op:Equal rhs:{(DQ (no))})]
                    )
                  ]
                )
                (case_arm
                  pat_list: [{(-n) (Lit_LBracket '[') (0-9) (Lit_RBracket ']') (Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:num)
                          op: Equal
                          rhs: {($ VSub_Number '$1')}
                        )
                      ]
                    )
                  ]
                )
                (case_arm
                  pat_list: [{(-r)}]
                  action: [
                    (command.ShAssignment
                      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:reverse) op:Equal rhs:{(DQ (r))})]
                    )
                  ]
                )
                (case_arm pat_list:[{(--help)}] action:[(C {(usage)})])
                (case_arm
                  pat_list: [{(--version)}]
                  action: [
                    (command.AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(echo)} {(DQ (1.1))})
                        (command.ControlFlow token:<ControlFlow_Exit exit>)
                      ]
                    )
                  ]
                )
                (case_arm
                  pat_list: [{(Lit_Star '*')}]
                  action: [(command.ControlFlow token:<ControlFlow_Break break>)]
                )
              ]
            )
            (C {(shift)})
          ]
        )
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (C {(Lit_LBracket '[')} {(DQ ($ VSub_DollarName '$dotfiles'))} {(Lit_Equals '=')} {(DQ (no))} 
          {(Lit_RBracket ']')}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:ignore_hidden)
              op: Equal
              rhs: {(DQ ("-name '.*' -o"))}
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (C {(Lit_LBracket '[')} {(DQ ($ VSub_DollarName '$recurse'))} {(Lit_Equals '=')} {(DQ (no))} 
          {(Lit_RBracket ']')}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:dont_recurse)
              op: Equal
              rhs: {(DQ ('-maxdepth 1'))}
            )
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(Lit_LBracket '[')} {($ VSub_Pound '$#')} {(-gt)} {(0)} {(Lit_RBracket ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:path_format) op:Equal rhs:{(DQ ('%p'))})]
            )
          ]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:path_format) op:Equal rhs:{(DQ ('%P'))})]
        )
        (C {(KW_Set set)} {(--)} {(DQ (./))})
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ignore_metadata)
          op: Equal
          rhs: 
            {
              (DQ (Lit_Other '\\') ('( -type d -a ') (Lit_Other '\\') 
                ("( -name '.git' -o -name '.svn' -o -name 'CVS' ") (Lit_Other '\\') (') ') (Lit_Other '\\') (') -prune -o')
              )
            }
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:print_format)
          op: Equal
          rhs: 
            {
              (DQ (Lit_Other '\\') ("( -type f -printf '%T@") (Lit_Other '\\') (t) 
                ($ VSub_DollarName '$path_format') (Lit_Other '\\') ("n' ") (Lit_Other '\\') (')')
              )
            }
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(eval)} {(find)} {(SQ <'"$@"'>)} {($ VSub_DollarName '$dont_recurse')} 
          {($ VSub_DollarName '$ignore_metadata')} {($ VSub_DollarName '$ignore_hidden')} {($ VSub_DollarName '$print_format')}
        )
        (C {(sort)} {(-k1) (Lit_Comma ',') (1) (${ VSub_Name reverse) (n)})
        (C {(tail)} {($ VSub_DollarName '$num')})
        (C {(cut)} {(-f2-)})
        (command.If
          arms: [
            (if_arm
              cond: [
                (command.Sentence
                  child: 
                    (C {(Lit_LBracket '[')} {(KW_Bang '!')} {(-p)} {(/proc/self/fd/1)} 
                      {(Lit_RBracket ']')}
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              action: [
                (command.Pipeline
                  children: [
                    (C {(tr)} {(SQ <'\\n'>)} {(SQ <'\\0'>)})
                    (C {(xargs)} {(-r0)} {(ls)} {(-lUd)} {(--color) (Lit_Equals '=') (auto)} {(--)})
                  ]
                  negated: F
                )
              ]
            )
          ]
          else_action: [(C {(cat)})]
        )
      ]
      negated: F
    )
  ]
)