(command.CommandList children: [ (C {(set)} {(-o)} {(nounset)}) (C {(set)} {(-o)} {(pipefail)}) (C {(set)} {(-o)} {(errexit)}) (command.Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:DASH) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.AndOr ops: [Op_DPipe] children: [ (command.SimpleCommand words: [{(which)} {(dash)}] redirects: [(redir.Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) (C {(echo)} {(/bin/sh)}) ] ) ] ) left_token: <Left_DollarParen '$('> ) } ) ] ) (command.Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:BASH) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(which)} {(bash)})]) left_token: <Left_DollarParen '$('> ) } ) ] ) (command.Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:MKSH) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(which)} {(mksh)})]) left_token: <Left_DollarParen '$('> ) } ) ] ) (command.Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:ZSH) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(which)} {(zsh)})]) left_token: <Left_DollarParen '$('> ) } ) ] ) (command.Assignment keyword: Assign_Readonly pairs: [(assign_pair lhs:(lhs_expr.LhsName name:BUSYBOX_ASH) op:Equal rhs:{(_tmp/shells/ash)})] ) (command.Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:OSH_PYTHON) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name OSH_PYTHON> suffix_op: (suffix_op.StringUnary op_id: VTest_ColonHyphen arg_word: {(bin) (Lit_Slash /) (osh)} ) ) } ) ] ) (command.Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:OSH_OVM) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name OSH_OVM> suffix_op: (suffix_op.StringUnary op_id: VTest_ColonHyphen arg_word: {(_bin) (Lit_Slash /) (osh)} ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} {(-e)} {($ VSub_DollarName '$OSH_OVM')}) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:OSH) op: Equal rhs: {(DQ ($ VSub_DollarName '$OSH_PYTHON') (' ') ($ VSub_DollarName '$OSH_OVM'))} ) ] ) ] ) ] else_action: [ (command.Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:OSH) op: Equal rhs: {(DQ ($ VSub_DollarName '$OSH_PYTHON'))} ) ] ) ] ) (command.Assignment keyword: Assign_Readonly pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:REF_SHELLS) op: Equal rhs: { (word_part.ArrayLiteralPart words: [ {($ VSub_DollarName '$DASH')} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} ] ) } ) ] ) (command.FuncDef name: link-busybox-ash body: (command.BraceGroup children: [ (C {(mkdir)} {(-p)} { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(dirname)} {($ VSub_DollarName '$BUSYBOX_ASH')})] ) left_token: <Left_DollarParen '$('> ) } ) (C {(ln)} {(-s)} {(-f)} {(--verbose)} { (DQ (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(which)} {(busybox)})]) left_token: <Left_DollarParen '$('> ) ) } {($ VSub_DollarName '$BUSYBOX_ASH')} ) ] ) ) (command.FuncDef name: install-shells body: (command.BraceGroup children: [ (C {(sudo)} {(apt-get)} {(install)} {(busybox-static)} {(mksh)} {(zsh)}) (C {(link-busybox-ash)}) ] ) ) (command.FuncDef name: check-shells body: (command.BraceGroup children: [ (command.ForEach iter_name: sh iter_words: [ { (DQ (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} ] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(test)} {(-e)} {($ VSub_DollarName '$sh')}) (command.BraceGroup children: [ (command.Sentence child: (C {(echo)} {(DQ ('ERROR: ') ($ VSub_DollarName '$sh') (' does not exist'))} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.ControlFlow token:<ControlFlow_Break break>) terminator: <Op_Semi ';'> ) ] ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(test)} {(-x)} {($ VSub_DollarName '$sh')}) (command.BraceGroup children: [ (command.Sentence child: (C {(echo)} {(DQ ('ERROR: ') ($ VSub_DollarName '$sh') (" isn't executable"))} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (command.ControlFlow token:<ControlFlow_Break break>) terminator: <Op_Semi ';'> ) ] ) ] ) ] ) ) ] ) ) (command.FuncDef name: _wget body: (command.BraceGroup children: [(C {(wget)} {(--no-clobber)} {(--directory)} {(_tmp/src)} {(DQ ($ VSub_At '$@'))})] ) ) (command.FuncDef name: download-shell-source body: (command.BraceGroup children: [ (C {(mkdir)} {(-p)} {(_tmp/src)}) (C {(_wget)} {(https) (Lit_Other ':') (//ftp.gnu.org/gnu/bash/bash-4.4.tar.gz)}) (C {(_wget)} {(https) (Lit_Other ':') (//www.mirbsd.org/MirOS/dist/mir/mksh/mksh-R54.tgz)}) (C {(_wget)} {(https) (Lit_Other ':') (//downloads.sourceforge.net/project/zsh/zsh/5.3.1/zsh-5.3.1.tar.xz) } ) ] ) ) (command.FuncDef name: maybe-show body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:path) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} {(-e)} {($ VSub_DollarName '$path')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('--- ') ($ VSub_DollarName '$path') (' ---'))}) (C {(cat)} {($ VSub_DollarName '$path')}) (C {(echo)}) ] ) ] ) ] ) ) (command.FuncDef name: version-text body: (command.BraceGroup children: [ (C {(date)}) (C {(echo)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} {(-d)} {(.git)}) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:branch) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(--abbrev-ref)} {(HEAD)})] ) left_token: <Left_DollarParen '$('> ) } ) ] ) (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:hash) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(git)} {(rev-parse)} {($ VSub_DollarName '$branch')}) ] ) left_token: <Left_DollarParen '$('> ) } ) ] ) (C {(echo)} { (DQ ('oil repo: ') ($ VSub_DollarName '$hash') (' on branch ') ($ VSub_DollarName '$branch') ) } ) ] ) ] else_action: [(C {(echo)} {(DQ ('(not running from git repository)'))})] ) (C {(echo)}) (command.ForEach iter_name: bin iter_words: [{($ VSub_DollarName '$OSH')}] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)} { (DQ (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) (' ') ($ VSub_DollarName '$bin') (' --version') ) } ) (C {($ VSub_DollarName '$bin')} {(--version)}) (C {(echo)}) ] ) ) (command.SimpleCommand words: [{(python)} {(--version)}] redirects: [(redir.Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})] ) (C {(echo)}) (command.Pipeline children: [(C {($ VSub_DollarName '$BASH')} {(--version)}) (C {(head)} {(-n)} {(1)})] negated: F ) (C {(echo)}) (command.Pipeline children: [(C {($ VSub_DollarName '$ZSH')} {(--version)}) (C {(head)} {(-n)} {(1)})] negated: F ) (C {(echo)}) (command.Pipeline children: [(C {(dpkg)} {(-s)} {(dash)}) (C {(egrep)} {(SQ <'^Package|Version'>)})] negated: F ) (C {(echo)}) (command.Pipeline children: [(C {(dpkg)} {(-s)} {(mksh)}) (C {(egrep)} {(SQ <'^Package|Version'>)})] negated: F ) (C {(echo)}) (command.Pipeline children: [ (command.BraceGroup children: [ (command.Sentence child: (command.AndOr ops:[Op_DPipe] children:[(C {(busybox)}) (C {(true)})]) terminator: <Op_Semi ';'> ) ] ) (C {(head)} {(-n)} {(1)}) ] negated: F ) (C {(echo)}) (C {(maybe-show)} {(/etc/debian_version)}) (C {(maybe-show)} {(/etc/lsb-release)}) ] ) ) (command.FuncDef name: sh-spec body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:this_dir) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(cd)} { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(dirname)} {($ VSub_Number '$0')})] ) left_token: <Left_DollarParen '$('> ) } ) (C {(pwd)}) ] ) ] ) left_token: <Left_DollarParen '$('> ) } ) ] ) (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:tmp_env) op: Equal rhs: {($ VSub_DollarName '$this_dir') (/../_tmp/spec-tmp)} ) ] ) (C {(mkdir)} {(-p)} {($ VSub_DollarName '$tmp_env')}) (C {(test/sh_spec.py)} {(--tmp-env)} {($ VSub_DollarName '$tmp_env')} {(--path-env)} {(DQ ($ VSub_DollarName '$this_dir') ('/../spec/bin:') ($ VSub_DollarName '$PATH'))} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: trace-var-sub body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(lhs_expr.LhsName name:out) op:Equal rhs:{(_tmp/coverage)})] ) (C {(mkdir)} {(-p)} {($ VSub_DollarName '$out')}) (C {(python)} {(-m)} {(trace)} {(--trackcalls)} {(-C)} {($ VSub_DollarName '$out')} {(test/sh_spec.py)} {(spec/var-sub.test.sh)} {($ VSub_DollarName '$DASH')} {($ VSub_DollarName '$BASH')} {(DQ ($ VSub_At '$@'))} ) (C {(ls)} {(-l)} {($ VSub_DollarName '$out')}) (C {(head)} {($ VSub_DollarName '$out') (/) (Lit_Other '*') (.cover)}) ] ) ) (command.FuncDef name: all body: (command.BraceGroup children: [(C {(test/spec-runner.sh)} {(all-parallel)} {(DQ ($ VSub_At '$@'))})] ) ) (command.FuncDef name: smoke body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/smoke.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: osh-only body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/osh-only.test.sh)} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))}) ] ) ) (command.FuncDef name: bugs body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/bugs.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: blog1 body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/blog1.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: blog2 body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/blog2.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: blog-other1 body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/blog-other1.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: alias body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/alias.test.sh)} {(--osh-failures-allowed)} {(10)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: comments body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/comments.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: word-split body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/word-split.test.sh)} {(--osh-failures-allowed)} {(2)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: word-eval body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/word-eval.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: assign body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/assign.test.sh)} {(--osh-failures-allowed)} {(3)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: background body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/background.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: subshell body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/subshell.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: quote body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/quote.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$BUSYBOX_ASH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: loop body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/loop.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: case_ body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/case_.test.sh)} {(--osh-failures-allowed)} {(2)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: if_ body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/if_.test.sh)} {(--osh-failures-allowed)} {(1)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: builtins body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/builtins.test.sh)} {(--osh-failures-allowed)} {(1)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: builtin-io body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/builtin-io.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$BUSYBOX_ASH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: builtins2 body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/builtins2.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: builtin-dirs body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/builtin-dirs.test.sh)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: builtin-vars body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/builtin-vars.test.sh)} {(--osh-failures-allowed)} {(2)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: builtin-getopts body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/builtin-getopts.test.sh)} {(--osh-failures-allowed)} {(1)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$BUSYBOX_ASH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: builtin-test body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/builtin-test.test.sh)} {(--osh-failures-allowed)} {(1)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: builtin-trap body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/builtin-trap.test.sh)} {(--osh-failures-allowed)} {(3)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: builtin-bash body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/builtin-bash.test.sh)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: builtins-special body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/builtins-special.test.sh)} {(--osh-failures-allowed)} {(3)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: command-parsing body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/command-parsing.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: func-parsing body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/func-parsing.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: func body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/func.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: glob body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/glob.test.sh)} {(--osh-failures-allowed)} {(2)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$BUSYBOX_ASH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: arith body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/arith.test.sh)} {(--osh-failures-allowed)} {(3)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: command-sub body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/command-sub.test.sh)} {(--osh-failures-allowed)} {(2)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: command_ body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/command_.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: pipeline body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/pipeline.test.sh)} {(--osh-failures-allowed)} {(3)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: explore-parsing body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/explore-parsing.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: parse-errors body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/parse-errors.test.sh)} {(--osh-failures-allowed)} {(5)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: here-doc body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/here-doc.test.sh)} {(--osh-failures-allowed)} {(1)} {(--range)} {(0-30)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: redirect body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/redirect.test.sh)} {(--osh-failures-allowed)} {(5)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: posix body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/posix.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: special-vars body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/special-vars.test.sh)} {(--osh-failures-allowed)} {(4)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: introspect body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/introspect.test.sh)} {(--osh-failures-allowed)} {(3)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: tilde body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/tilde.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: var-op-test body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/var-op-test.test.sh)} {(--osh-failures-allowed)} {(5)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: var-op-other body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/var-op-other.test.sh)} {(--osh-failures-allowed)} {(2)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: var-op-strip body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/var-op-strip.test.sh)} {(--osh-failures-allowed)} {(1)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: var-sub body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/var-sub.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: var-num body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/var-num.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: var-sub-quote body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/var-sub-quote.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: sh-options body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/sh-options.test.sh)} {(--osh-failures-allowed)} {(3)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: xtrace body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/xtrace.test.sh)} {(--osh-failures-allowed)} {(5)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: strict-options body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/strict-options.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: errexit body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/errexit.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$BUSYBOX_ASH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: errexit-strict body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/errexit-strict.test.sh)} { (word_part.BracedVarSub token: <VSub_Name REF_SHELLS> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } {($ VSub_DollarName '$BUSYBOX_ASH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: arith-context body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/arith-context.test.sh)} {(--osh-failures-allowed)} {(3)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: array body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/array.test.sh)} {(--osh-failures-allowed)} {(8)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: array-compat body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/array-compat.test.sh)} {(--osh-failures-allowed)} {(7)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: type-compat body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/type-compat.test.sh)} {($ VSub_DollarName '$BASH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: append body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/append.test.sh)} {(--osh-failures-allowed)} {(4)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: assoc body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/assoc.test.sh)} {($ VSub_DollarName '$BASH')} {(DQ ($ VSub_At '$@'))}) ] ) ) (command.FuncDef name: assoc-zsh body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/assoc-zsh.test.sh)} {($ VSub_DollarName '$ZSH')} {(DQ ($ VSub_At '$@'))}) ] ) ) (command.FuncDef name: dbracket body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/dbracket.test.sh)} {(--osh-failures-allowed)} {(2)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: dparen body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/dparen.test.sh)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: brace-expansion body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/brace-expansion.test.sh)} {(--osh-failures-allowed)} {(12)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: regex body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/regex.test.sh)} {(--osh-failures-allowed)} {(3)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: process-sub body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/process-sub.test.sh)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$ZSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: extended-glob body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/extended-glob.test.sh)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: var-ref body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/var-ref.test.sh)} {(--osh-failures-allowed)} {(5)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: let body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/let.test.sh)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$ZSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: for-expr body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/for-expr.test.sh)} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$OSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (command.FuncDef name: shell-grammar body: (command.BraceGroup children: [ (C {(sh-spec)} {(spec/shell-grammar.test.sh)} {($ VSub_DollarName '$BASH')} {($ VSub_DollarName '$MKSH')} {($ VSub_DollarName '$ZSH')} {(DQ ($ VSub_At '$@'))} ) ] ) ) (C {(DQ ($ VSub_At '$@'))}) ] )