(CommandList children: [ (FuncDef name: k_string_get_line body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:lineNo) op:Equal spids:[52]) (assign_pair lhs:(LhsName name:delim) op:Equal spids:[54]) ] spids: [50] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-eq)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(k_log_err)} {(DQ ('k_string_get_line requires least 1 argument'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [16777215 71] ) ] spids: [16777215 86] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:delim) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(printf)} {(SQ <'\\n '>)})]) left_token: <Left_CommandSub '$('> spids: [92 98] ) ) } spids: [90] ) ] spids: [90] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:lineNo) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [102] ) ] spids: [102] ) (C {(shift)}) (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_At '$@'))}) (C {(cut)} {(-d)} { (DQ (BracedVarSub token: <VSub_Name delim> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(' ')}) spids: [126 130] ) ) } {(-f)} {(DQ (${ VSub_Name lineNo))} ) ] negated: F ) ] spids: [47] ) spids: [43 46] ) (FuncDef name: k_string_pad_right body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:length) op:Equal spids:[175]) (assign_pair lhs:(LhsName name:text) op:Equal spids:[177]) ] spids: [173] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-eq)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(k_log_err)} {(DQ ('k_string_pad_right requires least 1 argument'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [16777215 194] ) ] spids: [16777215 209] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:length) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [213] ) ] spids: [213] ) (C {(shift)}) (C {(printf)} {(DQ ('%-') (${ VSub_Name length) (s))} {(DQ ($ VSub_Star '$*'))}) ] spids: [170] ) spids: [166 169] ) (FuncDef name: k_string_pad_left body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:length) op:Equal spids:[274]) (assign_pair lhs:(LhsName name:text) op:Equal spids:[276]) ] spids: [272] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-eq)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(k_log_err)} {(DQ ('k_string_pad_left requires least 1 argument'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 293] ) ] spids: [16777215 308] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:length) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [312] ) ] spids: [312] ) (C {(shift)}) (C {(printf)} {(DQ ('%+') (${ VSub_Name length) (s))} {(DQ ($ VSub_Star '$*'))}) ] spids: [269] ) spids: [265 268] ) (FuncDef name: k_string_lower body: (BraceGroup children: [ (Pipeline children: [ (C {(printf)} {(DQ ('%s'))} {(DQ ($ VSub_Star '$*'))}) (C {(tr)} {(SQ <'[:upper:]'>)} {(SQ <'[:lower:]'>)}) ] negated: F ) ] spids: [364] ) spids: [360 363] ) (FuncDef name: k_string_upper body: (BraceGroup children: [ (Pipeline children: [ (C {(printf)} {(DQ ('%s'))} {(DQ ($ VSub_Star '$*'))}) (C {(tr)} {(SQ <'[:lower:]'>)} {(SQ <'[:upper:]'>)}) ] negated: F ) ] spids: [417] ) spids: [413 416] ) (FuncDef name: k_string_contains body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:substring) op:Equal spids:[478]) (assign_pair lhs:(LhsName name:string) op:Equal spids:[480]) ] spids: [476] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-lt)} {(2)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(k_log_err)} {(DQ ('k_string_contains requires least 2 arguments'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 496] ) ] spids: [16777215 511] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:substring) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [515] ) ] spids: [515] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:string) op: Equal rhs: {(DQ ($ VSub_Star '$*'))} spids: [526] ) ] spids: [526] ) (If arms: [ (if_arm cond: [ (Sentence child: (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (DQ (BracedVarSub token: <VSub_Name string> prefix_op: VSub_Pound spids: [538 541] ) ) } {(-gt)} {(0)} {(Lit_Other ']')} ) (C {(Lit_Other '[')} { (DQ (BracedVarSub token: <VSub_Name string> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {('*') (${ VSub_Name substring) ('*')} ) spids: [555 563] ) ) } {(KW_Bang '!') (Lit_Other '=')} {(DQ (${ VSub_Name string))} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [16777215 578] ) ] spids: [16777215 586] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [473] ) spids: [469 472] ) (FuncDef name: k_string_starts_with body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:substring) op:Equal spids:[630]) (assign_pair lhs:(LhsName name:string) op:Equal spids:[632]) ] spids: [628] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-lt)} {(2)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(k_log_err)} {(DQ ('k_string_starts_with requires least 2 arguments'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 648] ) ] spids: [16777215 663] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:substring) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [667] ) ] spids: [667] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:string) op: Equal rhs: {(DQ ($ VSub_Star '$*'))} spids: [678] ) ] spids: [678] ) (If arms: [ (if_arm cond: [ (Sentence child: (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (DQ (BracedVarSub token: <VSub_Name string> prefix_op: VSub_Pound spids: [690 693] ) ) } {(-gt)} {(0)} {(Lit_Other ']')} ) (C {(Lit_Other '[')} { (DQ (BracedVarSub token: <VSub_Name string> suffix_op: (StringUnary op_id: VOp1_DPercent arg_word: {(${ VSub_Name substring) ('*')} ) spids: [707 714] ) ) } {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [16777215 725] ) ] spids: [16777215 733] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [625] ) spids: [621 624] ) (FuncDef name: k_string_ends_with body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:substring) op:Equal spids:[777]) (assign_pair lhs:(LhsName name:string) op:Equal spids:[779]) ] spids: [775] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-lt)} {(2)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(k_log_err)} {(DQ ('k_string_ends_with requires least 2 arguments'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 795] ) ] spids: [16777215 810] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:substring) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [814] ) ] spids: [814] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:string) op: Equal rhs: {(DQ ($ VSub_Star '$*'))} spids: [825] ) ] spids: [825] ) (If arms: [ (if_arm cond: [ (Sentence child: (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (DQ (BracedVarSub token: <VSub_Name string> prefix_op: VSub_Pound spids: [837 840] ) ) } {(-gt)} {(0)} {(Lit_Other ']')} ) (C {(Lit_Other '[')} { (DQ (BracedVarSub token: <VSub_Name string> suffix_op: (StringUnary op_id: VOp1_DPound arg_word: {('*') (${ VSub_Name substring)} ) spids: [854 861] ) ) } {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [16777215 872] ) ] spids: [16777215 880] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [772] ) spids: [768 771] ) (FuncDef name: k_string_remove_start body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:substring) op:Equal spids:[924]) (assign_pair lhs:(LhsName name:string) op:Equal spids:[926]) (assign_pair lhs: (LhsName name:greedy) op: Equal rhs: {(false)} spids: [928] ) ] spids: [922] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(k_bool_parse)} { (DQ (BracedVarSub token: <VSub_Name REMOVE_GREEDY> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(EmptyPart)}) spids: [942 945] ) ) } ) ] ) left_token: <Left_CommandSub '$('> spids: [938 947] ) ) } {(Lit_Other '=')} {(true)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:greedy) op: Equal rhs: {(true)} spids: [960] ) ] spids: [960] ) ] spids: [16777215 957] ) ] spids: [16777215 964] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-lt)} {(2)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(k_log_err)} {(DQ ('k_string_remove_start requires least 2 arguments'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 981] ) ] spids: [16777215 996] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:substring) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [1000] ) ] spids: [1000] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:string) op: Equal rhs: {(DQ ($ VSub_Star '$*'))} spids: [1011] ) ] spids: [1011] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name greedy)} {(Lit_Other '=')} {(true)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(printf)} {(DQ ('%s'))} { (DQ (BracedVarSub token: <VSub_Name string> suffix_op: (StringUnary op_id: VOp1_DPound arg_word: {(${ VSub_Name substring)} ) spids: [1043 1049] ) ) } ) ] spids: [16777215 1033] ) ] else_action: [ (C {(printf)} {(DQ ('%s'))} { (DQ (BracedVarSub token: <VSub_Name string> suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{(${ VSub_Name substring)}) spids: [1063 1069] ) ) } ) ] spids: [1053 1073] ) ] spids: [919] ) spids: [915 918] ) (FuncDef name: k_string_remove_end body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:substring) op:Equal spids:[1114]) (assign_pair lhs:(LhsName name:string) op:Equal spids:[1116]) (assign_pair lhs: (LhsName name:greedy) op: Equal rhs: {(false)} spids: [1118] ) ] spids: [1112] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(k_bool_parse)} { (DQ (BracedVarSub token: <VSub_Name REMOVE_GREEDY> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(EmptyPart)}) spids: [1132 1135] ) ) } ) ] ) left_token: <Left_CommandSub '$('> spids: [1128 1137] ) ) } {(Lit_Other '=')} {(true)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:greedy) op: Equal rhs: {(true)} spids: [1150] ) ] spids: [1150] ) ] spids: [16777215 1147] ) ] spids: [16777215 1154] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-lt)} {(2)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(k_log_err)} {(DQ ('k_string_remove_start requires least 2 arguments'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 1171] ) ] spids: [16777215 1186] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:substring) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [1190] ) ] spids: [1190] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:string) op: Equal rhs: {(DQ ($ VSub_Star '$*'))} spids: [1201] ) ] spids: [1201] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name greedy)} {(Lit_Other '=')} {(true)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(printf)} {(DQ ('%s'))} { (DQ (BracedVarSub token: <VSub_Name string> suffix_op: (StringUnary op_id: VOp1_DPercent arg_word: {(${ VSub_Name substring)} ) spids: [1233 1239] ) ) } ) ] spids: [16777215 1223] ) ] else_action: [ (C {(printf)} {(DQ ('%s'))} { (DQ (BracedVarSub token: <VSub_Name string> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(${ VSub_Name substring)}) spids: [1253 1259] ) ) } ) ] spids: [1243 1263] ) ] spids: [1109] ) spids: [1105 1108] ) (FuncDef name: k_string_join body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:separator) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Number 1> suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(EmptyPart)}) spids: [1313 1316] ) ) } spids: [1311] ) ] spids: [1309] ) (C {(shift)}) (C {(k_string_remove_end)} {(DQ (${ VSub_Name separator))} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(printf)} {(DQ ('%s') (${ VSub_Name separator))} {(DQ ($ VSub_At '$@'))}) ] ) left_token: <Left_CommandSub '$('> spids: [1332 1345] ) ) } ) ] spids: [1306] ) spids: [1302 1305] ) (FuncDef name: k_string_trim body: (BraceGroup children: [ (Pipeline children: [ (C {(printf)} {(DQ ('%s'))} {(DQ ($ VSub_Star '$*'))}) (C {(sed)} {(-e)} {(DQ ('s/^[[:space:]]*//g; s/[[:space:]]*') (Lit_Other '$') ('//g;'))}) ] negated: F ) ] spids: [1376] ) spids: [1372 1375] ) (FuncDef name: k_string_keyword_error body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:input) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [1446] ) ] spids: [1444] ) (C {(shift)}) (While cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-gt)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name input))} {(Lit_Other '=')} {(DQ (${ VSub_Number 1))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(printf)} {(DQ ($ VSub_Number '$1'))}) (ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] spids: [16777215 1494] ) ] spids: [16777215 1509] ) (C {(shift)}) ] spids: [1470 1515] ) ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [1441] ) spids: [1437 1440] ) (FuncDef name: k_string_keyword body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:value) op:Equal spids:[1559])] spids: [1557] ) (If arms: [ (if_arm cond: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:value) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(k_string_keyword_error)} {(DQ ($ VSub_At '$@'))}) ] ) left_token: <Left_CommandSub '$('> spids: [1566 1572] ) ) } spids: [1564] ) ] spids: [1564] ) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(DQ (${ VSub_Name value))})] spids: [16777215 1576] ) ] else_action: [ (C {(shift)} { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithWord w:{($ VSub_Pound '$#')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [1593 1598] ) } ) (C {(echo)} {(DQ ($ VSub_Number '$1'))}) ] spids: [1588 1608] ) ] spids: [1554] ) spids: [1550 1553] ) ] )