(CommandList children: [ (FuncDef name: relpath body: (BraceGroup children: [ (AndOr children: [ (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-ge)} {(1)} {(Lit_Other ']')}) (AndOr children: [ (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-le)} {(2)} {(Lit_Other ']')}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] op_id: Op_DPipe ) ] op_id: Op_DAmp ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:current) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Number 2> suffix_op: (StringUnary op_id: VTest_ColonPlus arg_word: {(DQ ($ VSub_Number '$1'))} ) spids: [53 59] ) ) } spids: [51] ) ] spids: [51] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:target) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Number 2> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(DQ ($ VSub_Number '$1'))} ) spids: [65 71] ) ) } spids: [63] ) ] spids: [63] ) (AndOr children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$target'))} {(KW_Bang '!') (Lit_Other '=')} {(.)} {(Lit_Other ']')} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:target) op:Equal rhs:{(/)} spids:[90])] spids: [90] ) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:target) op: Equal rhs: { (DQ (/) (BracedVarSub token: <VSub_Name target> suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{(Lit_Slash /)}) spids: [97 101] ) ) } spids: [94] ) ] spids: [94] ) (AndOr children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$current'))} {(KW_Bang '!') (Lit_Other '=')} {(.)} {(Lit_Other ']')} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:current) op:Equal rhs:{(/)} spids:[120])] spids: [120] ) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:current) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name current> suffix_op: (StringUnary op_id:VTest_ColonEquals arg_word:{(DQ (/))}) spids: [126 132] ) ) } spids: [124] ) ] spids: [124] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:current) op: Equal rhs: { (DQ (/) (BracedVarSub token: <VSub_Name current> suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{(Lit_Slash /)}) spids: [139 143] ) ) } spids: [136] ) ] spids: [136] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:appendix) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name target> suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{(Lit_Slash /)}) spids: [149 153] ) ) } spids: [147] ) ] spids: [147] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:relative) op:Equal rhs:{(SQ )} spids:[157])] spids: [157] ) (While cond: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:appendix) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name target> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(DQ ($ VSub_Name '$current')) (Lit_Slash /)} ) spids: [166 173] ) ) } spids: [164] ) ] spids: [164] ) (Sentence child: (AndOr children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$current'))} {(KW_Bang '!') (Lit_Other '=')} {(SQ </>)} {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$appendix'))} {(Lit_Other '=')} {(DQ ($ VSub_Name '$target'))} {(Lit_Other ']')} ) ] op_id: Op_DAmp ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$current'))} {(Lit_Other '=')} {(DQ ($ VSub_Name '$appendix'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:relative) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name relative> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(.)} ) spids: [234 238] ) ) } spids: [232] ) ] spids: [232] ) (C {(echo)} { (DQ (BracedVarSub token: <VSub_Name relative> suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{(Lit_Slash /)}) spids: [245 249] ) ) } ) (ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] spids: [-1 229] ) ] spids: [-1 258] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:current) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name current> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /) ('*')} ) spids: [263 268] ) ) } spids: [261] ) ] spids: [261] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:relative) op: Equal rhs: { (DQ ($ VSub_Name '$relative') (BracedVarSub token: <VSub_Name relative> suffix_op: (StringUnary op_id: VTest_ColonPlus arg_word: {(Lit_Slash /)} ) spids: [275 279] ) (..) ) } spids: [272] ) ] spids: [272] ) ] spids: [209 284] ) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:relative) op: Equal rhs: { (DQ ($ VSub_Name '$relative') (BracedVarSub token: <VSub_Name relative> suffix_op: (StringUnary op_id: VTest_ColonPlus arg_word: { (BracedVarSub token: <VSub_Name appendix> suffix_op: (StringUnary op_id: VTest_ColonPlus arg_word: {(Lit_Slash /)} ) spids: [293 297] ) } ) spids: [290 298] ) (BracedVarSub token: <VSub_Name appendix> suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{(Lit_Slash /)}) spids: [299 303] ) ) } spids: [287] ) ] spids: [287] ) (C {(echo)} {(DQ ($ VSub_Name '$relative'))}) ] spids: [19] ) spids: [14 18] ) (C {(relpath)} {(DQ ($ VSub_At '$@'))}) ] )