(command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name __mal_env_included__))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:__mal_env_included spids:[27]) op: Equal rhs: {(true)} spids: [27] ) ] spids: [27] ) (C {(source)} { (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(dirname)} {($ VSub_Number '$0')})]) left_token: <Left_CommandSub '$('> spids: [33 37] ) (/types.sh) } ) (command.FuncDef name: ENV body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:r spids:[55]) op: Equal rhs: (word.EmptyWord) spids: [55] ) ] spids: [55] ) (C {(_hash_map)}) (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env spids:[63]) op: Equal rhs: {(DQ (${ VSub_Name r))} spids: [63] ) ] spids: [61] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr:(bool_expr.WordTest w:{(DQ (${ VSub_Number 1))})) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:outer spids:[87]) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [87] ) ] spids: [87] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (C {(_assoc) (KW_Bang '!')} {(DQ (${ VSub_Name env))} {(DQ (__outer__))} {(DQ (${ VSub_Name outer))} ) ] spids: [16777215 84] ) ] else_action: [ (C {(_assoc) (KW_Bang '!')} {(DQ (${ VSub_Name env))} {(DQ (__outer__))} {(DQ (${ VSub_Name __nil))} ) ] spids: [118 141] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:r spids:[144]) op: Equal rhs: {(DQ (${ VSub_Name env))} spids: [144] ) ] spids: [144] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.WordTest w:{(DQ (${ VSub_Number 1))}) right: (bool_expr.WordTest w:{(DQ (${ VSub_At '@'))}) ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:binds spids:[179]) op: Equal rhs: { (word_part.ArrayLiteralPart words: [ { (word_part.BracedVarSub token: <VSub_Name ANON> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(DQ (${ VSub_Number 1))} ) ) spids: [181 190] ) } ] ) } spids: [179] ) ] spids: [177] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:idx spids:[199]) op: Equal rhs: {(0)} spids: [199] ) ] spids: [197] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.WordTest w: { (DQ (word_part.BracedVarSub token: <VSub_Name binds> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(DQ (${ VSub_Name idx))} ) ) spids: [208 217] ) ) } ) ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:fp spids:[228]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name ANON> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (DQ (word_part.BracedVarSub token: <VSub_Name binds> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(DQ (${ VSub_Name idx))} ) ) spids: [234 243] ) ) } ) ) spids: [230 246] ) ) } spids: [228] ) ] spids: [226] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ (${ VSub_Name fp))} right: {(DQ ('&'))} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:idx spids:[272]) op: Equal rhs: { (word_part.ArithSubPart anode: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithVarRef token: <Lit_ArithVarLike idx> ) right: (arith_expr.ArithWord w: {(Lit_Digits 1)} ) ) spids: [273 282] ) } spids: [272] ) ] spids: [272] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:fp spids:[285]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name ANON> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (DQ (word_part.BracedVarSub token: <VSub_Name binds> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (DQ (${ VSub_Name idx) ) } ) ) spids: [291 300] ) ) } ) ) spids: [287 303] ) ) } spids: [285] ) ] spids: [285] ) (C {(_list)} {(DQ (${ VSub_At '@'))}) (C {(_assoc) (KW_Bang '!')} {(DQ (${ VSub_Name env))} {(DQ (${ VSub_Name fp))} {(DQ (${ VSub_Name r))} ) (command.ControlFlow token: <ControlFlow_Break break> ) ] spids: [16777215 269] ) ] else_action: [ (C {(_assoc) (KW_Bang '!')} {(DQ (${ VSub_Name env))} {(DQ (${ VSub_Name fp))} {(DQ (${ VSub_Number 1))} ) (C {(shift)}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:idx spids:[369]) op: Equal rhs: { (word_part.ArithSubPart anode: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithVarRef token: <Lit_ArithVarLike idx> ) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) spids: [370 379] ) } spids: [369] ) ] spids: [369] ) ] spids: [341 382] ) ] spids: [223 385] ) ) ] spids: [16777215 174] ) ] spids: [16777215 388] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:r spids:[391]) op: Equal rhs: {(DQ (${ VSub_Name env))} spids: [391] ) ] spids: [391] ) ] spids: [52] ) spids: [47 51] ) (command.FuncDef name: ENV_FIND body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(_contains) (Lit_Other '?')} {(DQ (${ VSub_Number 1))} { (DQ (word_part.BracedVarSub token: <VSub_Name ANON> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 2))}) ) spids: [424 433] ) ) } ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:r spids:[440]) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [440] ) ] spids: [440] ) ] spids: [16777215 437] ) ] else_action: [ (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:obj spids:[453]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name ANON> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 1))}) ) spids: [455 464] ) ) } spids: [453] ) ] spids: [451] ) (C {(eval)} {(Assign_Local local)} {(Lit_VarLike 'outer=') (DQ (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{') (${ VSub_Name obj) ('[') ) (__outer__) (DQ (']}')) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.WordTest w:{(DQ (${ VSub_Name outer))}) right: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ (${ VSub_Name outer))} right: {(DQ (${ VSub_Name __nil))} ) ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(ENV_FIND)} {(DQ (${ VSub_Name outer))} {(DQ (${ VSub_Number 2))}) ] spids: [16777215 516] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:r spids:[537]) op: Equal rhs: (word.EmptyWord) spids: [537] ) ] spids: [537] ) ] spids: [534 540] ) ] spids: [448 543] ) ] spids: [409] ) spids: [404 408] ) (command.FuncDef name: ENV_GET body: (command.BraceGroup children: [ (C {(ENV_FIND)} {(DQ (${ VSub_Number 1))} {(DQ (${ VSub_Number 2))}) (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env spids:[582]) op: Equal rhs: {(DQ (${ VSub_Name r))} spids: [582] ) ] spids: [580] ) (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:key spids:[592]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name ANON> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 2))}) ) spids: [594 603] ) ) } spids: [592] ) ] spids: [590] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr:(bool_expr.WordTest w:{(DQ (${ VSub_Name r))})) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:obj spids:[625]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name ANON> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Name env))}) ) spids: [627 636] ) ) } spids: [625] ) ] spids: [623] ) (C {(eval)} {(Lit_VarLike 'r=') (DQ (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{') (${ VSub_Name obj) ('[') ) (${ VSub_Name key) (DQ (']}')) } ) ] spids: [16777215 620] ) ] else_action: [(C {(_error)} {(DQ ("'") (${ VSub_Name key) ("' not found"))})] spids: [659 673] ) ] spids: [562] ) spids: [557 561] ) (command.FuncDef name: ENV_SET body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:key spids:[688]) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name ANON> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 2))}) ) spids: [690 699] ) ) } spids: [688] ) ] spids: [686] ) (C {(_assoc) (KW_Bang '!')} {(DQ (${ VSub_Number 1))} {(DQ (${ VSub_Name key))} {(DQ (${ VSub_Number 3))} ) ] spids: [683] ) spids: [678 682] ) ] spids: [16777215 25] ) ] spids: [16777215 727] )