(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)} ) ] ) ] ) )