(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:all)
          op: assign_op.Equal
          rhs: {(SQ <'exit 0'>)}
          spids: [31]
        )
      ]
    )
    (command.Case
      to_match: {(DQ ($ Id.VSub_Number '$1'))}
      arms: [
        (case_arm
          pat_list: [{<-a>}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:all)
                  op: assign_op.Equal
                  rhs: {(DQ <'found=\'exit 0\''>)}
                  spids: [48]
                )
              ]
            )
            (C {<shift>})
          ]
          spids: [45 46 -1 56]
        )
      ]
    )
    (command.Case
      to_match: {($ Id.VSub_Pound '$#') <Id.Lit_Colon ':'> ($ Id.VSub_Number '$0')}
      arms: [
        (case_arm
          pat_list: [{<1> <Id.Lit_Colon ':'> <Id.Lit_Star '*'> <whatis>}]
          spids: [67 71 74 -1]
        )
        (case_arm
          pat_list: [{<1> <Id.Lit_Colon ':'> <Id.Lit_Star '*'> <apropos>}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:all)
                  op: assign_op.Equal
                  rhs: {(DQ <'found=\'exit 0\''>)}
                  spids: [83]
                )
              ]
            )
          ]
          spids: [76 80 89 -1]
        )
        (case_arm
          pat_list: [{<Id.Lit_Star '*'>}]
          action: [
            (command.Simple
              words: [
                {<echo>}
                {
                  (DQ <'Usage: '> 
                    (command_sub
                      left_token: <Id.Left_Backtick '`'>
                      child: (C {<basename>} {($ Id.VSub_Number '$0')})
                    ) <' [-a] <keyword>'>
                  )
                }
              ]
              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>})
          ]
          spids: [91 92 -1 116]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IFS)
          op: assign_op.Equal
          rhs: {(DQ <':'> ($ Id.VSub_DollarName '$IFS'))}
          spids: [119]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MANPATH)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name MANPATH>
                  suffix_op: 
                    (suffix_op.Unary
                      tok: <Id.VTest_Hyphen ->
                      arg_word: 
                        {<Id.Lit_Slash '/'> <usr> <Id.Lit_Slash '/'> <local> <Id.Lit_Slash '/'> <'man:'> 
                          <Id.Lit_Slash '/'> <usr> <Id.Lit_Slash '/'> <man>
                        }
                    )
                )
              )
            }
          spids: [125]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:found)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [144]
        )
      ]
    )
    (command.ForEach
      iter_name: m
      iter_words: [{($ Id.VSub_DollarName '$MANPATH')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ForEach
              iter_name: w
              iter_words: [{($ Id.VSub_DollarName '$m') <'/whatis'>}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {<test>} {<-f>} {($ Id.VSub_DollarName '$w')})
                        (command.ControlFlow
                          token: <Id.ControlFlow_Continue continue>
                        )
                      ]
                    )
                    (command.Case
                      to_match: {($ Id.VSub_Number '$0')}
                      arms: [
                        (case_arm
                          pat_list: [{<Id.Lit_Star '*'> <whatis>}]
                          action: [
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (C {<grep>} 
                                  {(SQ <'^\\('>) ($ Id.VSub_Number '$1') (SQ <'\\|[^(]* '>) 
                                    ($ Id.VSub_Number '$1') (SQ <'\\)[ ,][^(]*('>)
                                  } {($ Id.VSub_DollarName '$w')}
                                )
                                (C {<eval>} {($ Id.VSub_DollarName '$all')})
                              ]
                            )
                          ]
                          spids: [190 192 218 -1]
                        )
                        (case_arm
                          pat_list: [{<Id.Lit_Star '*'> <apropos>}]
                          action: [
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (C {<grep>} {<-i>} {(DQ ($ Id.VSub_Number '$1'))} 
                                  {($ Id.VSub_DollarName '$w')}
                                )
                                (C {<eval>} {($ Id.VSub_DollarName '$all')})
                              ]
                            )
                          ]
                          spids: [221 223 -1 243]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (C {($ Id.VSub_DollarName '$found')})
    (command.Simple
      words: [
        {<echo>}
        {
          (DQ 
            (command_sub
              left_token: <Id.Left_Backtick '`'>
              child: (C {<basename>} {($ Id.VSub_Number '$0')})
            ) <': '> ($ Id.VSub_Number '$1') <': not found'>
          )
        }
      ]
      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>})
  ]
)