(command.CommandList
  children: [
    (C {<_Dbg_help_add_sub>} {<info>} {<functions>} 
      {
        (SQ <'**info functions** [*pattern*]\n'> <'\n'> 
          <'Show functions matching regular expression PATTERN.\n'> <'If pattern is empty, list all functions.\n'> <'\n'> <'Examples:\n'> <'---------\n'> <'\n'> 
          <'  info functions       \\# list of all functions\n'> <'  info functions s     \\# functions containing an \\"s\\"\n'> 
          <'  info function  \\^s    \\# functions starting with an \\"s\\"\n'> <'\n'> <'See also:\n'> <'---------\n'> <'\n'> <'**info variables**.'>
        )
      } {<1>}
    )
    (command.ShFunction
      name: _Dbg_do_info_functions
      body: 
        (BraceGroup
          children: [
            (C {<typeset>} {<Id.Lit_VarLike 'pat='> ($ Id.VSub_Number '$1')})
            (C {<typeset>} {<-a>} {<fns_a>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:fns_a)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: <Id.Op_LParen _>
                        words: [
                          {
                            (command_sub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (C {<_Dbg_get_functions>} {<0>} {(DQ ($ Id.VSub_DollarName '$pat'))})
                            )
                          }
                        ]
                      )
                    }
                  spids: [114]
                )
              ]
            )
            (C {<typeset>} {<-i>} {<i>})
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: <Id.Lit_ArithVarLike i>
                  right: {<Id.Lit_Digits 0>}
                )
              cond: 
                (arith_expr.Binary
                  op_id: Id.Arith_Less
                  left: <Id.Lit_ArithVarLike i>
                  right: 
                    {
                      (braced_var_sub
                        token: <Id.VSub_Name fns_a>
                        prefix_op: (Id.VSub_Pound)
                        bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                      )
                    }
                )
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:<Id.Lit_ArithVarLike i>)
              body: 
                (command.DoGroup
                  children: [
                    (C {<_Dbg_msg>} 
                      {
                        (braced_var_sub
                          token: <Id.VSub_Name fns_a>
                          bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName '$i')})
                        )
                      }
                    )
                  ]
                )
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
        )
    )
  ]
)