(command.CommandList children: [ (command.FuncDef name: relpath body: (command.BraceGroup children: [ (command.AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-ge)} {(1)} {(Lit_Other ']')}) (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-le)} {(2)} {(Lit_Other ']')}) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:current) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 2> suffix_op: (suffix_op.StringUnary op_id: VTest_ColonPlus arg_word: {(DQ ($ VSub_Number '$1'))} ) ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:target) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 2> suffix_op: (suffix_op.StringUnary op_id: VTest_ColonHyphen arg_word: {(DQ ($ VSub_Number '$1'))} ) ) ) } ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$target'))} {(KW_Bang '!') (Lit_Other '=')} {(.)} {(Lit_Other ']')} ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:target) op:Equal rhs:{(/)})] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:target) op: Equal rhs: { (DQ (/) (word_part.BracedVarSub token: <VSub_Name target> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPound arg_word:{(Lit_Slash /)}) ) ) } ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$current'))} {(KW_Bang '!') (Lit_Other '=')} {(.)} {(Lit_Other ']')} ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:current) op:Equal rhs:{(/)})] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:current) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name current> suffix_op: (suffix_op.StringUnary op_id:VTest_ColonEquals arg_word:{(DQ (/))}) ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:current) op: Equal rhs: { (DQ (/) (word_part.BracedVarSub token: <VSub_Name current> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPound arg_word:{(Lit_Slash /)}) ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:appendix) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name target> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPound arg_word:{(Lit_Slash /)}) ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:relative) op:Equal rhs:{(SQ )})] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:appendix) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name target> suffix_op: (suffix_op.StringUnary op_id: VOp1_Pound arg_word: {(DQ ($ VSub_DollarName '$current')) (Lit_Slash /)} ) ) ) } ) ] ) (command.Sentence child: (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$current'))} {(KW_Bang '!') (Lit_Other '=')} {(SQ </>)} {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$appendix'))} {(Lit_Other '=')} {(DQ ($ VSub_DollarName '$target'))} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$current'))} {(Lit_Other '=')} {(DQ ($ VSub_DollarName '$appendix'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:relative) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name relative> suffix_op: (suffix_op.StringUnary op_id: VTest_ColonHyphen arg_word: {(.)} ) ) ) } ) ] ) (C {(echo)} { (DQ (word_part.BracedVarSub token: <VSub_Name relative> suffix_op: (suffix_op.StringUnary op_id: VOp1_Pound arg_word: {(Lit_Slash /)} ) ) ) } ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:current) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name current> suffix_op: (suffix_op.StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /) ('*')} ) ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:relative) op: Equal rhs: { (DQ ($ VSub_DollarName '$relative') (word_part.BracedVarSub token: <VSub_Name relative> suffix_op: (suffix_op.StringUnary op_id: VTest_ColonPlus arg_word: {(Lit_Slash /)} ) ) (..) ) } ) ] ) ] ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:relative) op: Equal rhs: { (DQ ($ VSub_DollarName '$relative') (word_part.BracedVarSub token: <VSub_Name relative> suffix_op: (suffix_op.StringUnary op_id: VTest_ColonPlus arg_word: { (word_part.BracedVarSub token: <VSub_Name appendix> suffix_op: (suffix_op.StringUnary op_id: VTest_ColonPlus arg_word: {(Lit_Slash /)} ) ) } ) ) (word_part.BracedVarSub token: <VSub_Name appendix> suffix_op: (suffix_op.StringUnary op_id:VOp1_Pound arg_word:{(Lit_Slash /)}) ) ) } ) ] ) (C {(echo)} {(DQ ($ VSub_DollarName '$relative'))}) ] ) ) (C {(relpath)} {(DQ ($ VSub_At '$@'))}) ] )