(command.CommandList children: [ (C {(.)} {(validint)}) (command.ShFunction name: validfloat body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fvalue) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [48] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:67) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$fvalue')}) (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/[^.]//g' span_id:77))} ) ] negated: F ) ] ) ) } {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:83) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:decimalPart) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:95) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$fvalue')}) (C {(cut)} {(-d.)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [93] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fractionalPart) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:fvalue span_id:119) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {('*') (word_part.EscapedLiteral token: (Token id: Id.Lit_EscapedChar val: '\\.' span_id: 122 ) ) } ) ) ) } spids: [116] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} {($ Id.VSub_DollarName '$decimalPart')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:149) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(validint)} {(DQ ($ Id.VSub_DollarName '$decimalPart'))} {(DQ )} {(DQ )}) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:178) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:183) arg_word: {(1)} ) ] spids: [162 180] ) ] ) ] spids: [137 151] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:fractionalPart span_id:214) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: { (braced_var_sub token: (Token id: Id.VSub_Name val: fractionalPart span_id: 217 ) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {('?')} ) ) } ) ) ) } {(Id.Lit_Equals '=')} {(DQ (-))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:232) ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ("Invalid floating-point number: '-' not allowed ") (' after decimal point') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:245) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:252) arg_word: {(1)} ) ] spids: [208 234] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$fractionalPart'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ )} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:277) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(validint)} {(DQ ($ Id.VSub_DollarName '$fractionalPart'))} {(DQ (0))} {(DQ )} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:304) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:309) arg_word: {(1)} ) ] spids: [287 306] ) ] ) ] spids: [261 279] ) ] ) ] spids: [59 85] ) ] else_action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$fvalue'))} {(Id.Lit_Equals '=')} {(DQ (-))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:344) ) ] action: [ (command.Sentence child: (command.Simple words: [{(echo)} {(DQ ('Invalid floating-point format.'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:355) fd: -1 arg_word: {(2)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:358) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:360) arg_word: {(1)} ) ] spids: [328 346] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(validint)} {(DQ ($ Id.VSub_DollarName '$fvalue'))} {(DQ )} {(DQ )})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:393) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:398) arg_word: {(1)} ) ] spids: [377 395] ) ] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:410) arg_word: {(0)} ) ] ) ) ] )