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