(command.ShFunction
  name: validAlphaNum
  body: 
    (command.BraceGroup
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:validchars)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ 
                    (command_sub
                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:27)
                      command_list: 
                        (command.CommandList
                          children: [
                            (command.Pipeline
                              children: [
                                (C {(echo)} {($ Id.VSub_Number '$1')})
                                (C {(sed)} {(-e)} 
                                  {(SQ (Token id:Id.Lit_Chars val:'s/[^[:alnum:]]//g' span_id:39))}
                                )
                              ]
                              negated: F
                            )
                          ]
                        )
                    )
                  )
                }
              spids: [25]
            )
          ]
        )
        (command.If
          arms: [
            (if_arm
              cond: [
                (command.Sentence
                  child: 
                    (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$validchars'))} 
                      {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_RBracket ']')}
                    )
                  terminator: (Token id:Id.Op_Semi val:';' span_id:62)
                )
              ]
              action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:67)
                  arg_word: {(0)}
                )
              ]
              spids: [46 64]
            )
          ]
          else_action: [
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:75)
              arg_word: {(1)}
            )
          ]
        )
      ]
    )
)