(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 spids:[59]) 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'))} ) spids: [61 67] ) ) } spids: [59] ) ] spids: [59] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:target spids:[71]) 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'))} ) spids: [73 79] ) ) } spids: [71] ) ] spids: [71] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$target'))} {(KW_Bang '!') (Lit_Other '=')} {(.)} {(Lit_Other ']')} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:target spids:[98]) op: Equal rhs: {(/)} spids: [98] ) ] spids: [98] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:target spids:[102]) op: Equal rhs: { (DQ (/) (word_part.BracedVarSub token: <VSub_Name target> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPound arg_word:{(Lit_Slash /)}) spids: [105 109] ) ) } spids: [102] ) ] spids: [102] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$current'))} {(KW_Bang '!') (Lit_Other '=')} {(.)} {(Lit_Other ']')} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:current spids:[128]) op: Equal rhs: {(/)} spids: [128] ) ] spids: [128] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:current spids:[132]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name current> suffix_op: (suffix_op.StringUnary op_id:VTest_ColonEquals arg_word:{(DQ (/))}) spids: [134 140] ) ) } spids: [132] ) ] spids: [132] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:current spids:[144]) op: Equal rhs: { (DQ (/) (word_part.BracedVarSub token: <VSub_Name current> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPound arg_word:{(Lit_Slash /)}) spids: [147 151] ) ) } spids: [144] ) ] spids: [144] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:appendix spids:[155]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name target> suffix_op: (suffix_op.StringUnary op_id:VOp1_DPound arg_word:{(Lit_Slash /)}) spids: [157 161] ) ) } spids: [155] ) ] spids: [155] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:relative spids:[165]) op: Equal rhs: {(SQ )} spids: [165] ) ] spids: [165] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:appendix spids:[172]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name target> suffix_op: (suffix_op.StringUnary op_id: VOp1_Pound arg_word: {(DQ ($ VSub_Name '$current')) (Lit_Slash /)} ) spids: [174 181] ) ) } spids: [172] ) ] spids: [172] ) (command.Sentence child: (command.AndOr ops: [Op_DAmp] 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 ']')} ) ] ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$current'))} {(Lit_Other '=')} {(DQ ($ VSub_Name '$appendix'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:relative spids:[240]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name relative> suffix_op: (suffix_op.StringUnary op_id: VTest_ColonHyphen arg_word: {(.)} ) spids: [242 246] ) ) } spids: [240] ) ] spids: [240] ) (C {(echo)} { (DQ (word_part.BracedVarSub token: <VSub_Name relative> suffix_op: (suffix_op.StringUnary op_id: VOp1_Pound arg_word: {(Lit_Slash /)} ) spids: [253 257] ) ) } ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] spids: [16777215 237] ) ] spids: [16777215 266] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:current spids:[269]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name current> suffix_op: (suffix_op.StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /) ('*')} ) spids: [271 276] ) ) } spids: [269] ) ] spids: [269] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:relative spids:[280]) op: Equal rhs: { (DQ ($ VSub_Name '$relative') (word_part.BracedVarSub token: <VSub_Name relative> suffix_op: (suffix_op.StringUnary op_id: VTest_ColonPlus arg_word: {(Lit_Slash /)} ) spids: [283 287] ) (..) ) } spids: [280] ) ] spids: [280] ) ] spids: [217 292] ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:relative spids:[295]) op: Equal rhs: { (DQ ($ VSub_Name '$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 /)} ) spids: [301 305] ) } ) spids: [298 306] ) (word_part.BracedVarSub token: <VSub_Name appendix> suffix_op: (suffix_op.StringUnary op_id:VOp1_Pound arg_word:{(Lit_Slash /)}) spids: [307 311] ) ) } spids: [295] ) ] spids: [295] ) (C {(echo)} {(DQ ($ VSub_Name '$relative'))}) ] spids: [27] ) spids: [22 26] ) (C {(relpath)} {(DQ ($ VSub_At '$@'))}) ] )