(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: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [
                {(echo)}
                {
                  (DQ ('Usage: ') 
                    (command_sub
                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:77)
                      command_list: 
                        (command.CommandList
                          children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                        )
                    ) (' [-nr] [-na] [-n#] [-s] [-r] [path...]')
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:87)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:93)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('    -nr    do not recurse'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:103)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('    -na    ignore files starting with .'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:113)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [
                {(echo)}
                {
                  (DQ ('    -n#    list the newest # files (') ($ Id.VSub_DollarName '$num') 
                    (' by default)')
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:125)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('    -r     reverse to show oldest files'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:135)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:139)
              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: (Token id:Id.KW_While val:while span_id:166)
      cond: [(C {(Id.Lit_Other ':')})]
      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: (Token id:Id.Op_Semi val:';' span_id:186)
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Break val:break span_id:188)
                    )
                  ]
                  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: (Token id:Id.ControlFlow_Exit val:exit span_id:258)
                        )
                      ]
                    )
                  ]
                  spids: [247 248 260 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Break val:break span_id:266)
                    )
                  ]
                  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: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} {(Id.Lit_RBracket ']')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:331)
            )
          ]
          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 {(Id.KW_Set set)} {(--)} {(DQ (./))})
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ignore_metadata)
          op: assign_op.Equal
          rhs: 
            {
              (DQ (Id.Lit_Other '\\') ('( -type d -a ') (Id.Lit_Other '\\') 
                ("( -name '.git' -o -name '.svn' -o -name 'CVS' ") (Id.Lit_Other '\\') (') ') (Id.Lit_Other '\\') (') -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_Other '\\') ("( -type f -printf '%T@") (Id.Lit_Other '\\') (t) 
                ($ Id.VSub_DollarName '$path_format') (Id.Lit_Other '\\') ("n' ") (Id.Lit_Other '\\') (')')
              )
            }
          spids: [373]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(eval)} {(find)} {(SQ (Token id:Id.Lit_Chars val:'"$@"' span_id:391))} 
          {($ 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: [
                (command.Sentence
                  child: 
                    (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-p)} {(/proc/self/fd/1)} 
                      {(Id.Lit_RBracket ']')}
                    )
                  terminator: (Token id:Id.Op_Semi val:';' span_id:439)
                )
              ]
              action: [
                (command.Pipeline
                  children: [
                    (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:447))} 
                      {(SQ (Token id:Id.Lit_Chars val:'\\0' span_id:451))}
                    )
                    (C {(xargs)} {(-r0)} {(ls)} {(-lUd)} {(--color) (Id.Lit_Equals '=') (auto)} {(--)})
                  ]
                  negated: F
                )
              ]
              spids: [428 441]
            )
          ]
          else_action: [(C {(cat)})]
        )
      ]
      negated: F
    )
  ]
)