array=(a b c) ls ^~~~~~ "":1: Environment bindings can't contain array literals ..(command.CommandList children: [ (command.ShAssignment left: words:[] right:)} ) ] ) ] )(command.CommandList children: [ (command.ShAssignment left: words: [{} {} {}] right: ) } ) ] ) ] )(command.CommandList children: [ (command.Sentence child: (command.ShAssignment left: words: [{} {} {}] right: ) } ) ] ) terminator: ) (command.ShAssignment left: words: [{} {} {}] right: ) } ) ] ) ] )(command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T )(command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] )(command.AndOr children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [] )(command.AndOr children: [ (command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [] )(command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [] arms_end: )(command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{} {} {}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ) ] arms_end: )(command.Simple blame_tok: (Token id: Id.Lit_Chars length: 2 col: 0 line: (SourceLine line_num:1 content:"ls foo" src:(source.MainFile path:"")) ) more_env: [] words: [ (CompoundWord parts:[...0x7f4dc6cc5ae0]) (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:3 line:.....0x7f4dc6cd2f70)]) ] do_fork: T ) (command.ShFunction name_tok: (Token id: Id.Lit_Chars length: 3 col: 0 line: (SourceLine line_num: 1 content: "fun() { echo hi; }" src: (source.MainFile path:"") ) ) name: fun body: (BraceGroup left: (Token id:Id.Lit_LBrace length:1 col:6 line:...0x7f4dc6cd2f18) children: [ (command.Sentence child: (command.Simple blame_tok: (Token id:Id.Lit_Chars length:4 col:8 line:...0x7f4dc6cd2f18) more_env: [] words: [ (CompoundWord parts:[...0x7f4dc6cc5b48]) (CompoundWord parts: [(Token id:Id.Lit_Chars length:2 col:13 line:...0x7f4dc6cd2f18)] ) ] do_fork: T ) terminator: (Token id:Id.Op_Semi length:1 col:15 line:...0x7f4dc6cd2f18) ) ] right: (Token id:Id.Lit_RBrace length:1 col:17 line:...0x7f4dc6cd2f18) ) ) (command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) } ] do_fork: T )(command.Simple blame_tok: more_env: [] words: [ {} { (DQ (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) ) } ] do_fork: T )(command.CommandList children: [ (command.DBracket left: expr: (bool_expr.Binary op_id:Id.BoolBinary_gt left:{($ Id.VSub_Pound)} right:{}) right: ) ] )(command.CommandList children: [ (command.DBracket left: expr: (bool_expr.LogicalAnd left: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {($ Id.VSub_Pound)} right: {} ) right: (bool_expr.WordTest w:{}) ) right: ) ] )(command.CommandList children: [ (command.If if_kw: arms: [ (IfArm keyword: cond: (condition.Shell commands: [ (command.DBracket left: expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {($ Id.VSub_Pound)} right: {} ) right: ) ] ) then_kw: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] then_tok: ) ] else_action: [] fi_kw: ) ] )(command.CommandList children: [ (command.DBracket left: expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {} right: {} ) right: ) ] )(command.CommandList children: [ (command.DBracket left: expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {} right: { (word_part.BashRegexGroup left: child: { } right: ) } ) right: ) ] )(command.CommandList children: [ (command.DParen left: child: (arith_expr.Binary op: left: {} right: {} ) right: ) ] )(command.CommandList children: [ (command.ForEach keyword: iter_names: [i] iterable: (for_iter.Words words:[{} {} {}]) semi_tok: body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {($ i)}] do_fork: T ) ] right: ) ) ] )(command.CommandList children: [ (command.ForEach keyword: iter_names: [i] iterable: (for_iter.Words words:[]) semi_tok: body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {($ i)}] do_fork: T ) ] right: ) ) ] )(command.CommandList children: [ (command.ForEach keyword: iter_names: [i] iterable: (for_iter__Args) body: (command.DoGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {($ i)}] do_fork: T ) terminator: ) ] right: ) ) ] )(command.CommandList children: [ (command.ForEach keyword: iter_names: [i] iterable: (for_iter__Args) body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {($ i)}] do_fork: T ) ] right: ) ) ] )(command.CommandList children: [ (command.ForExpr keyword: init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: right: {} ) cond: (arith_expr.Binary op: left: right: {} ) . update: (arith_expr.UnaryAssign op_id:Id.Arith_DPlus child:) body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {($ i)}] do_fork: T ) ] right: ) ) ] )(command.CommandList children: [ (command.ForExpr keyword: init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: right: {} ) cond: (arith_expr.Binary op: left: right: {} ) update: (arith_expr.UnaryAssign op_id:Id.Arith_DPlus child:) body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {($ i)}] do_fork: T ) ] right: ) ) ] )(command.CommandList children: [ (command.ForExpr keyword: init: (arith_expr__EmptyZero) cond: (arith_expr__EmptyOne) update: ...0x7f4dc7109090 body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {($ i)}] do_fork: T ) ] right: ) ) ] )(command.CommandList children: [ (command.ShFunction name_tok: name: foo body: (BraceGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) ) ] )(command.CommandList children: [ (command.ShFunction name_tok: name: foo body: (command.Subshell left: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) ) ] )(command.CommandList children: [ (command.ShFunction name_tok: name: foo body: (command.ForEach keyword: iter_names: [i] iterable: (for_iter.Words words:[{}]) semi_tok: body: (command.DoGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {($ i)}] do_fork: T ) terminator: ) ] right: ) ) ) ] )(command.CommandList children: [ (command.ShFunction keyword: name_tok: name: foo body: (BraceGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) ) ] )(command.CommandList children: [ (command.ShFunction keyword: name_tok: name: foo body: (BraceGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) ) ] )(command.CommandList children: [ (command.ShFunction keyword: name_tok: name: foo body: (command.Subshell left: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) ) ] )(command.CommandList children: [ (command.ShFunction keyword: name_tok: name: foo body: (command.ForEach keyword: iter_names: [i] iterable: (for_iter.Words words:[{}]) semi_tok: body: (command.DoGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {($ i)}] do_fork: T ) terminator: ) ] right: ) ) ) ] )(command.CommandList children: [ (command.ShFunction keyword: name_tok: name: foo body: (command.ForEach keyword: iter_names: [i] iterable: (for_iter.Words words:[{}]) semi_tok: body: (command.DoGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {($ i)}] do_fork: T ) terminator: ) ] right: ) ) ) ] )(command.CommandList children: [ (command.ShFunction name_tok: name: foo body: (command.Redirect child: (BraceGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) redirects: [ (Redir op: &"> loc: (redir_loc.Fd fd:1) arg: {} ) (Redir op: "> loc: (redir_loc.Fd fd:2) arg: { } ) ] ) ) ] )(command.CommandList children: [ (command.If if_kw: arms: [ (IfArm keyword: cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) terminator: ) ] ) then_kw: action: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] then_tok: ) ] else_action: [] fi_kw: ) ] )(command.CommandList children: [ (command.If if_kw: arms: [ (IfArm keyword: cond: (condition.Shell commands: [ (command.Sentence child: (command.Subshell left: child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) right: ) terminator: ) ] ) then_kw: action: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] then_tok: ) ] else_action: [] fi_kw: ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] )(command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T )(command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] )(command.Pipeline negated: children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] )(command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple ls foo| ^ "":1: Unexpected EOF while parsing command .... blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [ ] )(command.CommandList children: [ (command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [ ] ) ] )(command.CommandList children: [ (command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [ ] ) ] )(command.CommandList children: [ (command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [ ] ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ {} {(word_part.TildeSub left:)} {(word_part.TildeSub left: name: user_name:root)} {(word_part.TildeSub left:) } {(word_part.TildeSub left:) } {(word_part.TildeSub left: name: user_name:root) } { } ] do_fork: T ) ] )(command.CommandList children: [ (command.WhileUntil keyword: cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) terminator: ) ] ) body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.ControlFlow keyword:) ] right: ) ) ] )(command.CommandList children: [ (command.WhileUntil keyword: cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) terminator: ) ] ) body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.ControlFlow keyword:) ] right: ) ) ] )(command.CommandList children: [ (command.WhileUntil keyword: cond: (condition.Shell commands: [ (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ) body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.ControlFlow keyword:) ] right: ) ) ] )(command.Case case_kw: to_match: (case_arg.YshExpr e:(expr.Var left: name:x)) arms_start: arms: [] arms_end: )(command.Case case_kw: to_match: (case_arg.YshExpr e:(expr.Var left: name:x)) arms_start: arms: [ (CaseArm left: pattern: (pat__Else) middle: action: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.YshExpr e:(expr.Var left: name:x)) arms_start: arms: [ (CaseArm left: pattern: (pat.YshExprs exprs: [ (expr.Const c: val:(value.Int i:2)) (expr.Const c: val:(value.Int i:3)) ] ) middle: action: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.YshExpr e:(expr.Var left: name:x)) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{} {} {(SQ string)}]) middle: action: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.YshExpr e:(expr.Var left: name:x)) arms_start: arms: [ (CaseArm left: pattern: (Eggex left: regex: (re.Repeat child:(PerlClass name:d) op:) flags: [] canonical_flags: "" ) middle: action: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) (CaseArm left: pattern: (Eggex left: regex: (re.Repeat child:(PerlClass name:d) op:) flags: [] canonical_flags: "" ) middle: action: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.YshExpr e:(expr.Var left: name:x)) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [(command.Expr keyword: ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.YshExpr e:(expr.Var left: name:x)) arms_start: arms: [ (CaseArm left: pattern: (Eggex left: regex:(SQ eggex) flags:[] canonical_flags:"") middle: action: [(command.Expr keyword: ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.YshExpr e:(expr.Var left: name:x)) arms_start: arms: [ (CaseArm left: pattern: (pat.YshExprs exprs:[(SQ expr)]) middle: action: [(command.Expr keyword: ) ] arms_end: )(command.Case case_kw: to_match: (case_arg.YshExpr e:(expr.Var left: name:x)) arms_start: arms: [ (CaseArm left: pattern: (pat__Else) middle: action: [(command.Expr keyword: ) ] arms_end: )(command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) redirects: [ (Redir op: "> loc: (redir_loc.Fd fd:2) arg: { } ) ] )(command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] )(command.AndOr c.hildren: [ (command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [] )(command.CommandList children: [ (command.Sentence child: (command.AndOr children: [ (command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [] ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.CommandList children: [ (command.Sentence child: (command.AndOr children: [ (command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [] ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.CommandList children: [ (command.Sentence child: (command.AndOr children: [ (command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] ) terminator: ) (command.AndOr children: [ . (( 1 + )) ^ "":1: Token can't be used in prefix position . A= (1 2) ^ "":1: Expected ( after = . [[ foo bar ]] ^~~ "":1: Expected ]] [[ foo -eq ]] ^ "":1: Expected ]] [[ foo$(echo <) -eq foo ]] ^ "":1: Invalid token after redirect operator . ls < ^ "":1: Invalid token after redirect operator ls < < ^ "":1: Invalid token after redirect operator echo foo$(ls <)bar ^ "":1: Invalid token after redirect operator BAD_ENV=(1 2 3) ls ^~~~~~~~ "":1: Environment bindings can't contain array literals for ((i=1; i<)); do echo $i; done ^ "":1: Token can't be used in prefix position for ((i=1; i<5; ++i)) OOPS echo $i; ERR ^~~~ "":1: Invalid word after for expression for ((i=1; i<5; ++i)); OOPS echo $i; ERR ^~~~ "":1: Expected word type Id.KW_Do, got Id.Word_Compound for $bad in 1 2; do echo hi; done ^~~~ "":1: Expected loop variable (a constant word) for foo BAD ^ "":1: Expected loop variable (a constant word) if foo; then echo hi; z ^ "":1: Expected word type Id.KW_Fi, got Id.Eof_Real foo$(invalid) () { echo hi; } ^~~ "":1: Invalid function name . foo="" echo "bar ^ "":1: Unexpected EOF reading double-quoted string that began here .. for x in 1 2 $( ^ "":1: Invalid word in for loop . for [ i = 1; i < 10; i++ ] ^ "":1: Invalid loop variable name '[' for = in a ^ "":1: Invalid loop variable name '=' . for x in 1 2 $(cat <":1: Couldn't find terminator for here doc that starts here . foo"bar" () { ^~~ "":1: Invalid function name .. (command.Pipeline children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] ) ] )(command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ (CommandSub left_token: child: (command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ) right: ) ] ) ) ] )(command.AndOr children: [ (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ] ) ) ] ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] )(command.AndOr children: [ (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ] ) ) ] ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ops: [] )(command.AndOr children: [ (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ] ) ) ] ) (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ] ) ) ] ) ] ops: [] )(command.Pipeline children: [ (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ] ) ) ] ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [] )(command.Pipeline children: [ (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ] ) ) ] ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ops: [] )(command.CommandList children: [ (command.Sentence child: (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ] ) ) ] ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.CommandList children: [ (command.Sentence child: (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ] ) ) ] ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.Redirect ch....ild: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ($ foo) ] ) ) ] )(command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(DQ )} here_end_tok: stdin_parts: [ ] ) ) ] )(command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ EOF)} here_end_tok: stdin_parts: [] ) ) ] )(command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: { (word_part.EscapedLiteral token: ch:F)} here_end_tok: stdin_parts: [] ) ) ] )(command.CommandList children: [ (command.Pipeline children: [ (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ] ) ) ] ) (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [ ] ) ) ] ) ] ops: [] ) ] )(command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [($ v) ] ) ) ] )(command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: .. child: (command.Simple blame_tok: more_env: [] words: [ {} { (word_part.ArithSub left: anode: (arith_expr.Binary op: left: {} right: (arith_expr.Binary op: left: {} right: {} ) ) right: ) } ] do_fork: T ) right: ) } ] do_fork: T )(command.CommandList children: [ (command.Subshell left: child: (command.Simple blame_tok: more_env: [] words: [ {} { (word_part.ArithSub left: anode: (arith_expr.Binary op: left: {} right: (arith_expr.Binary op: left: {} right: {} ) ) right: ) } ] do_fork: T ) right: ) ] )(command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [ {} { (word_part.ArithSub left: anode: (arith_expr.Binary op: left: {} right: {} ) right: ) } ] do_fork: T ) right: ) } ] do_fork: T )(command.CommandList children: [ (command.Subshell left: child: (command.Simple blame_tok: more_env: [] words: [ {} { (word_part.ArithSub left: anode: (arith_expr.Binary op: left: {} right: {} ) right: ) } ] do_fork: T ) right: ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.ShAssignment left: words: [{} {} {}] right: ) } ) ] ) right: ) } ] do_fork: T ) ] )(command.CommandList children: [ (command.Subshell left: child: (command.ShAssignment left: words: [{} {} {}] right: ) } ) ] ) right: ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ { (CommandSub left_token: child: (command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) ] arms_end: ) right: ) } ] do_fork: T ) ] )(command.CommandList children: [ (command.Subshell left: child: (command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) ] arms_end: ) right: ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} ..{}] do_fork: T ) ] right: ) ] arms_end: ) right: ) } ] do_fork: T ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.CommandList children: [ (command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) ] arms_end: ) (command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) ] arms_end: ) ] ) right: ) } ] do_fork: T ) ] )(command.Simple blame_tok: more_env: [] words: [ {} { (DQ (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) ) } {} ] do_fork: T )(command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (Cas..eArm left: pattern: (pat.Words words: [ { (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) } ] ) middle: action: [ (command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) right: ) } ] do_fork: T ) ] right: ) ] arms_end: ) right: ) } ] do_fork: T ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.CommandList children: [ (command.Subshell left: child: (command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [] arms_end: ) right: ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ { (CommandSub left_token: child: (command.ForExpr keyword: init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: right: {} ) cond: (arith_expr.Binary op: left: right: {} ) update: (arith_expr.UnaryAssign op_id:Id.Arith_DPlus child:) body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ... ] right: ) ) right: ) } ] do_fork: T ) ] )(command.CommandList children: [ (command.Subshell left: child: (command.ForExpr keyword: init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: right: {} ) cond: (arith_expr.Binary op: left: right: {} ) update: (arith_expr.UnaryAssign op_id:Id.Arith_DPlus child:) body: (command.DoGroup left: children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) ) right: ) ] )(command.Simple blame_tok: more_env: [] words: [ {} { (word_part.ArithSub left: anode: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (arith_expr.Binary op: left: right: (arith_expr.Binary op: left: {} right: (arith_expr.Binary op: left: {} right: {} ) ) ) right: ) right: ) } ] do_fork: T )(command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [ { (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) } ] do_fork: T ) right: ) } {} ] do_fork: T )(BraceGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: )(command.CommandList children: [ (command.Sentence child: (BraceGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [..] words: [{} {}] do_fork: T ) terminator: ) (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.CommandList children: [ (command.Sentence child: (command.Subshell left: child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {} {}] do_fork: T ) ] ) right: ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {} {}] do_fork: T ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.CommandList children: [ (command.Sentence child: (command.ShFunction name_tok: name: fun body: (BraceGroup left: children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ) right: ) } ] do_fork: T ) ] )(command.CommandList children: [ (command.Subshell left: child: (command.CommandList children: [ (command.Sentence child: (command.ShFunction name_tok: name: fun body: (BraceGroup left: .. children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) ] right: ) ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) ] ) right: ) ] )(command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.CommandList children: [ (command.Sentence child: (command.Subshell left: child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ) right: ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] ) right: ) } ] do_fork: T ) terminator: ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ { (CommandSub left_token: child: (command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm ...... errcmd=( "${SETUP_STATE[$err.cmd]}" ) ^ "":1: Unexpected token while parsing arithmetic: '.' left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) ] arms_end: ) right: ) } ] do_fork: T ) ] )(command.CommandList children: [ (command.Subshell left: child: (command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] right: ) ] arms_end: ) right: ) ] )(command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) } {} ] do_fork: T )(command.CommandList children: [ (command.Sentence child: (command.DBracket left: expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: { (DQ (BracedVarSub left: token: var_name: marks bracket_op: (bracket_op.ArrayIndex expr: {(${ Id.VSub_Name tag_marker) (${ Id.VSub_Name cons_ptr) } ) right: ) ) } ) right: ) terminator: ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ {} { (word_part.ArithSub left: anode: { ($ foo)} right: ) } ] do_fork: T ) ] )(command.CommandList children: [ (command.ShAssignment left: words: [ { (DQ (BracedVarSub left: token: var_name: SETUP_STATE bracket_op: (bracket_op.ArrayIndex expr:{(DQ ($ err) )}) right: ) ) } ] right: ) } ) ] ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command__NoOp) right: ) } ] do_fork: T ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ {} { (CommandSub left_token: child: (command__NoOp) right: ) } ] do_fork: T ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ {} {} { (CommandSub left_token: child: (command__NoOp) right: ) } {} ] do_fork: T ) ] )(command.CommandList children: [ (command.ShAssignment left: child: (command__NoOp) right: ) (DQ ) } ) ] ) ] )(command.CommandList children: [ (command.If if_kw: arms: [ (IfArm keyword: cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) terminator: ) ] ) then_kw: action: [ (command.Subshell left: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) ] then_tok: ) ] else_action: [] fi_kw: ) ] )(command.CommandList children: [ (command.WhileUntil keyword: cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) terminator: ) ] ) body: (command.DoGroup left: children: [ (BraceGroup left: children: [ (command.Simple blame_tok: mor.e_env: [] words: [{} {}] do_fork: T ) (command.ControlFlow keyword:) ] right: ) ] right: ) ) ] )(command.CommandList children: [ (command.If if_kw: arms: [ (IfArm keyword: cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) terminator: ) ] ) then_kw: action: [ (command.Subshell left: child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) right: ) ] then_tok: ) ] else_action: [] fi_kw: ) ] )(command.CommandList children: [ (command.If if_kw: arms: [ (IfArm keyword: cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) terminator: ) ] ) then_kw: action: [ (command.If if_kw: arms: [ (IfArm keyword: cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) terminator: ) ] ) then_kw: action: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] then_tok: ) ] else_action: [] fi_kw: ) ] then_tok: ) ] else_action: [] fi_kw: ) (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.CommandList children: [ (command.Subshell left: child: (command.AndOr children: [ (command.Simple blame_tok: more_env: [] words: [{} {(DQ ($ PACKDIR))}] do_fork: T ) (command.ForEach keyword: ... iter_names: [e] iterable: (for_iter.Words words:[{($ existing)}]) body: (command.DoGroup left: children: [ (command.Case case_kw: to_match: (case_arg.Word w: {(DQ ($ fullbases) )} ) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words: [ { (DQ ($ e) ) } ] ) middle: action: [] right: ) (CaseArm left: pattern: (pat.Words words:[{}]) middle: action: [ (command.Simple blame_tok: more_env: [] words: [ {} {} {(DQ ($ e) )} {(DQ ($ e) )} {(DQ ($ e) )} ] do_fork: T ) ] right: ) ] arms_end: ) ] right: ) ) ] ops: [] ) right: ) ] )(command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: more_env: [] words: [ {} {(DQ ($ TEST_DIRECTORY)) } ] do_fork: T ) terminator: ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [{} { }] do_fork: T ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) ] )(command.Case case_kw: to_match: (case_arg.Word w:{(DQ ($ fd) ($ command))}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words: [ { } { } ] ) middle: action: [] right: ) ] arms_end: )(command.CommandList children: [ (command.Case case_kw: to_match: (case_arg.Word w:{}) arms_start: arms: [ (CaseArm left: pattern: (pat.Words words: [ { (SingleQuoted left: sval: "'" right: ) } ] ) middle: action: [ (command.ShAssignment left: ch:"\\")) (word_part.EscapedLiteral token: ch: "'" ) } ) ] ) ] right: ) ] arms_end: ) ] )(command.CommandList children: [ (command.Simple blame_tok: more_env: [] words: [ { (SingleQuoted left: sval: "abc\ndef" right: ) } ] do_fork: T ) ] )(command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T ) redirects: [ (Redir op:|"> loc:(redir_loc.Fd fd:1) arg:{}) ] )(Redir op:&"> loc:(redir_loc.Fd fd:1) arg:{})(Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin:{} stdin_parts:[]) )(Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin:{} stdin_parts:[]) )(command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {} here_end_tok: stdin_parts: [] ) ) (Redir op:"> loc:(redir_loc.Fd fd:1) arg:{}) ] )(Redir op:"> loc:(redir_loc.Fd fd:1) arg:{})(Redir op: loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin:{} stdin_parts:[]) )(command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [ (Redir op:"> loc:(redir_loc.Fd fd:1) arg:{}) (Redir op:&"> loc:(redir_loc.Fd fd:1) arg:{}) ] )(command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{}] do_fork: T ) redirects: [(Redir op: loc:(redir_loc.Fd fd:0) arg:{})] )(command.CommandList children: [ (command.ShAssignment left: "> loc:(redir_loc.Fd fd:1) arg:{})] ) ] )(command.Simple blame_tok: more_env: [] words: [ {} {(DQ ) } {(DQ ) (DQ )} {} ] do_fork: T )(command.CommandList children: [ (command.Redirect child: (command.Simple blame_tok: more_env: [ (EnvPair left: "> loc:(redir_loc.Fd fd:1) arg:{})] ) ] )(command.CommandList children: [ (command.Redirect child: (command.Simple blame_tok: more_env: [] words: [{} {} {} {}] do_fork: T ) redirects: [(Redir op:"> loc:(redir_loc.Fd fd:1) arg:{})] ) ] )(command.Simple blame_tok: more_env: [] words: [{} {}] do_fork: T )(command.Simple blame_tok: more_env: [(EnvPair left:"> loc:(redir_loc.Fd fd:1) arg:{})] )(command.Redirect child: (command.Simple blame_tok: more_env: [ (EnvPair left:"> loc:(redir_loc.Fd fd:1) arg:{}) (Redir op:"> loc:(redir_loc.Fd fd:1) arg:{}) ] )