(command.CommandList children: [ (command.ShFunction name_tok: <getopts_long> name: getopts_long body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name ZSH_VERSION> var_name: ZSH_VERSION suffix_op: (suffix_op.Unary op:<Id.VTest_Plus _> arg_word:{<z>}) right: <Id.Right_DollarBrace '}'> ) ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <emulate> more_env: [] words: [{<emulate>} {<-L>} {<sh>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <unset> more_env: [] words: [{<unset>} {<OPTLERR>} {<OPTLARG>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName OPTLIND))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words: [ {(DQ )} {<0>} {<Id.Lit_Star '*'> <Id.Lit_LBracket '['> <Id.KW_Bang '!'> <0-9> <Id.Lit_RBracket ']'> <Id.Lit_Star '*'> } ] ) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLIND='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLIND='> name:OPTLIND) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLPENDING='> name: OPTLPENDING ) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Pound '#'))} {<-lt>} {<2>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(SQ <'getopts_long: not enough arguments\\n'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [697 712] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <command> more_env: [(EnvPair left:<Id.Lit_VarLike 'LC_ALL='> name:LC_ALL val:{<C>})] words: [ {<command>} {<eval>} { (SQ <'\n'> <' case "$2" in\n'> <' *[!a-zA-Z_0-9]*|""|[0-9]*)\n'> <'\tprintf >&2 "getopts_long: invalid variable name: \\`%s'> ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <'\\n" "$2"\n'> <'\treturn 1\n'> <'\t;;\n'> <' esac'>) } ] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Colon ':'> pattern: (pat.Words words: [ {<Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Id.Lit_Star '*'>} {<Id.Lit_Star '*'> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Id.Lit_Star '*'> } {<Id.Lit_Star '*'> <-> <Id.Lit_Star '*'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'getopts_long: invalid option specification: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ch: '`' ) <'%s\''> <Id.Lit_BadBackslash '\\'> <n> ) } {(DQ ($ Id.VSub_Number 1))} ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<4>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 1))} {<-gt>} {(DQ ($ Id.VSub_Pound '#'))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {(SQ <'set -- "${'>) (DQ ($ Id.VSub_Number 1)) (SQ <'}" "$@"'>) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_Number 1))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_Number 2)} right: {<Id.Lit_Digits 2>} ) right: <Id.Right_DollarDParen _> ) ) } {<-gt>} {(DQ ($ Id.VSub_Pound '#'))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DPipe _>] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ < 'getopts_long: long option specifications must end in an empty argument' > <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [851 926] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {(SQ <'set -- "${'>) (DQ (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_Number 2)} right: {<Id.Lit_Digits 2>} ) right: <Id.Right_DollarDParen _> ) ) (SQ <'}" "$@"'>) } ] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 2))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words: [{<Id.Lit_Star '*'> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'getopts_long: invalid long option name: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ch: '`' ) <'%s\''> <Id.Lit_BadBackslash '\\'> <n> ) } {(DQ ($ Id.VSub_Number 2))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <0> pattern: (pat.Words words:[{<0>} {<no_argument>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <1> pattern: (pat.Words words:[{<1>} {<required_argument>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <2> pattern: (pat.Words words:[{<2>} {<optional_argument>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'getopts_long: invalid long option type: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ch: '`' ) <'%s\''> <Id.Lit_BadBackslash '\\'> <n> ) } {(DQ ($ Id.VSub_Number 1))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ <'shift 3; set '> (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_Number 3)} right: {<Id.Lit_Digits 2>} ) right: <Id.Right_DollarDParen _> ) ) (SQ <' "$@"'>) } ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ <'shift; set '> (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_Number 1)} right: {($ Id.VSub_DollarName OPTLIND)} ) right: <Id.Right_DollarDParen _> ) ) (SQ <' "$@"'>) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName OPTLPENDING))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 1))} {<-le>} {(DQ ($ Id.VSub_Pound '#'))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(SQ <'set -- "${'>) (DQ ($ Id.VSub_Number 1)) (SQ <'}" "$@"'>)}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <--> pattern: (pat.Words words:[{<-->}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLIND='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLIND='> name: OPTLIND ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName OPTLIND)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <--> pattern: (pat.Words words:[{<--> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLIND='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLIND='> name: OPTLIND ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName OPTLIND)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <-> pattern: (pat.Words words:[{<-> <Id.Lit_QMark '?'> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLPENDING='> name: OPTLPENDING ) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 1> var_name: 1 suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<->} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [1142 1155] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName OPTLPENDING))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLARG='> name:OPTLARG) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name OPTLPENDING> var_name: OPTLPENDING suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name OPTLPENDING> var_name: OPTLPENDING suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '?'>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <set> more_env: [] words: [ {<set>} {<-->} {(DQ ($ Id.VSub_DollarName OPTLARG))} {(DQ ($ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLPENDING='> name: OPTLPENDING ) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name OPTLPENDING> var_name: OPTLPENDING suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '?'>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <unset> more_env: [] words: [{<unset>} {<OPTLARG>}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName OPTLPENDING))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLIND='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLIND='> name:OPTLIND) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName OPTLIND)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] ops: [<Id.Op_DPipe _>] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_LBracket '['> pattern: (pat.Words words: [ {<Id.Lit_LBracket '['> <-> <Id.Lit_Colon ':'> <Id.Lit_RBracket ']'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLERR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLERR='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLERR='> name: OPTLERR ) op: assign_op.Equal rhs: { (DQ <'bad option: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ch: '`' ) <-> ($ Id.VSub_Number 1) <'\''> ) } ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 3))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Colon ':'> pattern: (pat.Words words:[{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 4) <'=:'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLARG='> name: OPTLARG ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName OPTLERR))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 4) <'=\'?\''>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 3))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words: [ {<Id.Lit_Star '*'> (DQ ($ Id.VSub_Number 1)) <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Id.Lit_Star '*'> } ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ ($ Id.VSub_Number 4) <'='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <1> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName OPTLPENDING))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLARG='> name: OPTLARG ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName OPTLPENDING))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLPENDING='> name: OPTLPENDING ) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLIND='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLIND='> name: OPTLIND ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName OPTLIND)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] spids: [1509 1522] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words: [ {<Id.Lit_Star '*'> (DQ ($ Id.VSub_Number 1)) <Id.Lit_Colon ':'> <Id.Lit_Star '*'> } ] ) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName OPTLPENDING))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLARG='> name: OPTLARG ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName OPTLPENDING))} ) ] redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ ($ Id.VSub_Number 4) <'='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <1> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLPENDING='> name: OPTLPENDING ) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLIND='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLIND='> name: OPTLIND ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName OPTLIND)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] spids: [1568 1581] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_Number 2)} right: {<Id.Lit_Digits 2>} ) right: <Id.Right_DollarDParen _> ) ) } {<-gt>} {(DQ ($ Id.VSub_Pound '#'))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLERR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLERR='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLERR='> name: OPTLERR ) op: assign_op.Equal rhs: { (DQ <'option '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ch: '`' ) <-> ($ Id.VSub_Number 1) <'\' requires an argument'> ) } ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: {(DQ ($ Id.VSub_Number 3))} ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Colon ':'> pattern: (pat.Words words: [ {<Id.Lit_Colon ':'> <Id.Lit_Star '*'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {(DQ ($ Id.VSub_Number 4) <'=:'>)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLARG='> name: OPTLARG ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words: [{<Id.Lit_Star '*'>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName OPTLERR))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {(DQ ($ Id.VSub_Number 4) <'=\'?\''>)} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [1627 1651] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLIND='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLIND='> name: OPTLIND ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName OPTLIND)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ <'OPTLARG='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'{'> (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_Number 2)} right: {<Id.Lit_Digits 2>} ) right: <Id.Right_DollarDParen _> ) <'}'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ ($ Id.VSub_Number 4) <'='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <1> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words: [ {<Id.Lit_Star '*'> (DQ ($ Id.VSub_Number 1)) <Id.Lit_Star '*'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ ($ Id.VSub_Number 4) <'='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <1> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLERR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLERR='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLERR='> name: OPTLERR ) op: assign_op.Equal rhs: { (DQ <'bad option: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ch: '`' ) <-> ($ Id.VSub_Number 1) <'\''> ) } ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 3))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Colon ':'> pattern: (pat.Words words: [{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 4) <'=:'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLARG='> name: OPTLARG ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName OPTLERR))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 4) <'=\'?\''>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [1285 1298] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLPENDING='> name:OPTLPENDING) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [ {<set>} {<6>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name OPTLPENDING> var_name: OPTLPENDING suffix_op: (suffix_op.Unary op:<Id.VOp1_Pound '#'> arg_word:{<-->}) right: <Id.Right_DollarBrace '}'> ) ) } {(DQ ($ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLPENDING='> name:OPTLPENDING) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {(SQ <'set -- "${'>) (DQ ($ Id.VSub_Number 1)) (SQ <'}" "$@"'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_Number 1))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 3> var_name: 3 suffix_op: (suffix_op.Unary op: <Id.VOp1_DPercent '%%'> arg_word: {<'='> <Id.Lit_Other '*'>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ ($ Id.VSub_Number 1))}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLPENDING='> name: OPTLPENDING ) op: assign_op.Equal rhs: {<EXACT>} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words: [ { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 3> var_name: 3 suffix_op: (suffix_op.Unary op: <Id.VOp1_DPercent '%%'> arg_word: {<'='> <Id.Lit_Other '*'>} ) right: <Id.Right_DollarBrace '}'> ) ) <Id.Lit_Star '*'> } ] ) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName OPTLPENDING))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName OPTLPENDING))} {<Id.Lit_Equals '='>} {<AMBIGUOUS>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {(SQ <'[ "${'>) (DQ (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName OPTLPENDING)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) ) (SQ <'}" = "$1" ]'>) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLPENDING='> name: OPTLPENDING ) op: assign_op.Equal rhs: {<AMBIGUOUS>} ) ] redirects: [] ) ] ops: [<Id.Op_DPipe _> <Id.Op_DPipe _>] ) ] spids: [2031 2044] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLPENDING='> name: OPTLPENDING ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ <'shift 2; set '> (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_Number 2)} right: {<Id.Lit_Digits 2>} ) right: <Id.Right_DollarDParen _> ) <' '> ) (SQ <'"$@"'>) } ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName OPTLPENDING))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <AMBIGUOUS> pattern: (pat.Words words:[{<AMBIGUOUS>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLERR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLERR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLERR='> name:OPTLERR) op: assign_op.Equal rhs: { (DQ <'option '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ch: '`' ) <--> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 3> var_name: 3 suffix_op: (suffix_op.Unary op: <Id.VOp1_DPercent '%%'> arg_word: {<'='> <Id.Lit_Other '*'>} ) right: <Id.Right_DollarBrace '}'> ) <'\' is ambiguous'> ) } ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 5))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Colon ':'> pattern: (pat.Words words:[{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 6) <'=:'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLARG='> name: OPTLARG ) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 3> var_name: 3 suffix_op: (suffix_op.Unary op: <Id.VOp1_DPercent '%%'> arg_word: {<'='> <Id.Lit_Other '*'>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName OPTLERR))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 6) <'=\'?\''>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLPENDING='> name: OPTLPENDING ) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <EXACT> pattern: (pat.Words words:[{<EXACT>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {(SQ <'set "${'>) (DQ (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_Number 2)} right: {<Id.Lit_Digits 2>} ) right: <Id.Right_DollarDParen _> ) ) (SQ <'}" "$@"'>) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ )}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLERR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLERR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLERR='> name:OPTLERR) op: assign_op.Equal rhs: { (DQ <'bad option: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ch: '`' ) <--> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 3> var_name: 3 suffix_op: (suffix_op.Unary op: <Id.VOp1_DPercent '%%'> arg_word: {<'='> <Id.Lit_Other '*'>} ) right: <Id.Right_DollarBrace '}'> ) <'\''> ) } ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 5))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Colon ':'> pattern: (pat.Words words:[{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 6) <'=:'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLARG='> name: OPTLARG ) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 3> var_name: 3 suffix_op: (suffix_op.Unary op: <Id.VOp1_DPercent '%%'> arg_word: {<'='> <Id.Lit_Other '*'>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName OPTLERR))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 6) <'=\'?\''>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLPENDING='> name: OPTLPENDING ) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {(SQ <'set "${'>) (DQ (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName OPTLPENDING)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) ) (SQ <'}" "${'>) (DQ ($ Id.VSub_DollarName OPTLPENDING)) (SQ <'}" "$@"'>) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLPENDING='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLPENDING='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLPENDING='> name:OPTLPENDING) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 4))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words: [{<Id.Lit_Star '*'> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}] ) middle: <Id.Right_CasePat _> action: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <1> pattern: (pat.Words words: [{<1>} {<required_argument>} {<2>} {<optional_argument>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ ($ Id.VSub_Number 7) <'='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <2> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLARG='> name: OPTLARG ) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 4> var_name: 4 suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '*'> <'='>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLERR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLERR='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLERR='> name: OPTLERR ) op: assign_op.Equal rhs: { (DQ <'option '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ch: '`' ) <--> ($ Id.VSub_Number 2) <'\' doesn\'t allow an argument'> ) } ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 6))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Colon ':'> pattern: (pat.Words words: [{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 7) <'=:'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLARG='> name: OPTLARG ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName OPTLERR))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 7) <'=\'?\''>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <1> pattern: (pat.Words words:[{<1>} {<required_argument>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_Number 5)} right: {<Id.Lit_Digits 5>} ) right: <Id.Right_DollarDParen _> ) ) } {<-gt>} {(DQ ($ Id.VSub_Pound '#'))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLERR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLERR='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLERR='> name: OPTLERR ) op: assign_op.Equal rhs: { (DQ <'option '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ch: '`' ) <--> ($ Id.VSub_Number 2) <'\' requires an argument'> ) } ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 6))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Colon ':'> pattern: (pat.Words words: [{<Id.Lit_Colon ':'> <Id.Lit_Star '*'>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_Number 7) <'=:'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLARG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLARG='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLARG='> name: OPTLARG ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName OPTLERR))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {(DQ ($ Id.VSub_Number 7) <'=\'?\''>)} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [2608 2632] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTLIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLIND='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OPTLIND='> name: OPTLIND ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName OPTLIND)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ <'OPTLARG='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'{'> (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_Number 5)} right: {<Id.Lit_Digits 5>} ) right: <Id.Right_DollarDParen _> ) <'}'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ ($ Id.VSub_Number 7) <'='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <2> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ ($ Id.VSub_Number 7) <'='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <2> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName test_getopts_long))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShFunction name_tok: <test_getopts_long> name: test_getopts_long body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'expected='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'expected='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expected='> name:expected) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) (AssignPair left: <Id.Lit_VarLike 'had='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'had='> name:had) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTLIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTLIND='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTLIND='> name:OPTLIND) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.ShAssignment left: <Id.Lit_VarLike 'err='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'err='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'err='> name:err) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<Id.Lit_Other '+'> <x>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <getopts_long> more_env: [] words: [{<getopts_long>} {(DQ ($ Id.VSub_At '@'))}] redirects: [ (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) ] ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.Sentence child: (command.Simple blame_tok: <getopts_long> more_env: [] words: [{<getopts_long>} {(DQ ($ Id.VSub_At '@'))}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ <'opt='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') ($ Id.VSub_Number 2) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'had='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'had='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'had='> name:had) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName had) <'|'> ($ Id.VSub_DollarName opt) <'@'> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name OPTLARG> var_name: OPTLARG suffix_op: (suffix_op.Unary op: <Id.VTest_Hyphen _> arg_word: {<unset>} ) right: <Id.Right_DollarBrace '}'> ) <'@'> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name OPTLIND> var_name: OPTLIND suffix_op: (suffix_op.Unary op: <Id.VTest_Hyphen _> arg_word: {<unset>} ) right: <Id.Right_DollarBrace '}'> ) <'@'> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name OPTLERR> var_name: OPTLERR suffix_op: (suffix_op.Unary op: <Id.VTest_Hyphen _> arg_word: {<unset>} ) right: <Id.Right_DollarBrace '}'> ) <'@'> ($ Id.VSub_DollarName err) ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'had='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'had='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'had='> name:had) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName had) <'|'> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name OPTLIND> var_name: OPTLIND suffix_op: (suffix_op.Unary op: <Id.VTest_Hyphen _> arg_word: {<unset>} ) right: <Id.Right_DollarBrace '}'> ) <'|'> ($ Id.VSub_DollarName err) ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName had))} {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName expected))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<PASS>}] redirects: [] do_fork: T ) ] spids: [2944 2961] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<FAIL>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'Expected: %s\\n Got: %s\\n'>)} {(DQ ($ Id.VSub_DollarName expected))} {(DQ ($ Id.VSub_DollarName had))} ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <read> more_env: [(EnvPair left:<Id.Lit_VarLike 'IFS='> name:IFS val:(rhs_word__Empty))] words: [{<read>} {<-r>} {<c>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <read> more_env: [(EnvPair left:<Id.Lit_VarLike 'IFS='> name:IFS val:(rhs_word__Empty))] words: [{<read>} {<-r>} {<e>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(SQ <'+ %-72s '>)} {(DQ ($ Id.VSub_DollarName c))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ <'test_getopts_long '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <e> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <' '> ($ Id.VSub_DollarName c) ) } ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'> ch:E) <OF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <': a\n'> < '|1|getopts_long: long option specifications must end in an empty argument\n' > <':a opt "" -a\n'> <'|a@unset@2@unset@|2|\n'> <':a opt "" -a b\n'> <'|a@unset@2@unset@|2|\n'> <':a opt "" -a -a\n'> <'|a@unset@2@unset@|a@unset@3@unset@|3|\n'> <':a opt "" -ab\n'> <'|a@unset@1@unset@|:@b@2@bad option: `-b\'@|2|\n'> <':a: opt "" -ab\n'> <'|a@b@2@unset@|2|\n'> <':a: opt "" -a b\n'> <'|a@b@3@unset@|3|\n'> <':a: opt "" -a -a\n'> <'|a@-a@3@unset@|3|\n'> <':a: opt "" -a\n'> <'|:@a@2@option `-a\' requires an argument@|2|\n'> <':a:: opt "" -a\n'> <'|a@unset@2@unset@|2|\n'> <':a:: opt "" -ab\n'> <'|a@b@2@unset@|2|\n'> <':a:: opt "" -a b\n'> <'|a@unset@2@unset@|2|\n'> <':ab: opt "" -ab c\n'> <'|a@unset@1@unset@|b@c@3@unset@|3|\n'> <':a:: opt "" -a -a\n'> <'|a@unset@2@unset@|a@unset@3@unset@|3|\n'> <':a:: opt "" -:a:\n'> <'|:@:@1@bad option: `-:\'@|a@:@2@unset@|2|\n'> <':= opt ""\n'> <'|1|\n'> <':: opt ""\n'> <'|1|getopts_long: invalid option specification: `::\'\n'> <': opt ""\n'> <'|1|\n'> <':a:a opt "" -a\n'> <'|:@a@2@option `-a\' requires an argument@|2|\n'> <':a::a opt "" -a\n'> <'|a@unset@2@unset@|2|\n'> <':ab:c:: opt "" -abc -cba -bac\n'> <'|a@unset@1@unset@|b@c@2@unset@|c@ba@3@unset@|b@ac@4@unset@|4|\n'> <': opt abc 0 "" --abc\n'> <'|abc@unset@2@unset@|2|\n'> <': opt abc no_argument "" --abc\n'> <'|abc@unset@2@unset@|2|\n'> <': opt abc no_argument "" --abc=foo\n'> <'|:@abc@2@option `--abc\' doesn\'t allow an argument@|2|\n'> <': opt abc no_argument "" --abc foo\n'> <'|abc@unset@2@unset@|2|\n'> <': opt abc 1 "" --abc=foo\n'> <'|abc@foo@2@unset@|2|\n'> <': opt abc required_argument "" --abc foo\n'> <'|abc@foo@3@unset@|3|\n'> <': opt abc required_argument "" --abc=\n'> <'|abc@@2@unset@|2|\n'> <': opt abc required_argument "" --abc\n'> <'|:@abc@2@option `--abc\' requires an argument@|2|\n'> <': opt abc 2 "" --abc\n'> <'|abc@unset@2@unset@|2|\n'> <': opt abc optional_argument "" --abc=\n'> <'|abc@@2@unset@|2|\n'> <': opt abc optional_argument "" --abc=foo\n'> <'|abc@foo@2@unset@|2|\n'> <': opt abc optional_argument "" --abc --abc\n'> <'|abc@unset@2@unset@|abc@unset@3@unset@|3|\n'> <': opt abc 0 abcd 0 "" --abc\n'> <'|abc@unset@2@unset@|2|\n'> <': opt abc 0 abd 0 "" --ab\n'> <'|:@ab@2@option `--ab\' is ambiguous@|2|\n'> <': opt abc 0 abcd 0 "" --ab\n'> <'|:@ab@2@option `--ab\' is ambiguous@|2|\n'> <': opt abc 0 abc 1 "" --ab\n'> <'|abc@unset@2@unset@|2|\n'> <': opt abc 0 abc 1 "" --abc\n'> <'|abc@unset@2@unset@|2|\n'> <': opt abc 0 abc 1 "" --ab\n'> <'|abc@unset@2@unset@|2|\n'> <': opt abc 0 acd 0 "" --ab\n'> <'|abc@unset@2@unset@|2|\n'> < ':abc:d:e::f:: opt ab 0 ac 1 bc 2 cd 1 cde 2 "" -abcdef -a -f -c --a --a= --b=foo -fg\n' > < '|a@unset@1@unset@|b@unset@1@unset@|c@def@2@unset@|a@unset@3@unset@|f@unset@4@unset@|c@--a@6@unset@|:@a@7@option `--a\' is ambiguous@|bc@foo@8@unset@|f@g@9@unset@|9|\n' > <'a opt "" -a\n'> <'|a@unset@2@unset@|2|\n'> <'a opt "" -a b\n'> <'|a@unset@2@unset@|2|\n'> <'a opt "" -a -a\n'> <'|a@unset@2@unset@|a@unset@3@unset@|3|\n'> <'a opt "" -ab\n'> <'|a@unset@1@unset@|?@unset@2@bad option: `-b\'@bad option: `-b\'|2|\n'> <'a: opt "" -ab\n'> <'|a@b@2@unset@|2|\n'> <'a: opt "" -a b\n'> <'|a@b@3@unset@|3|\n'> <'a: opt "" -a -a\n'> <'|a@-a@3@unset@|3|\n'> <'a: opt "" -a\n'> < '|?@unset@2@option `-a\' requires an argument@option `-a\' requires an argument|2|\n' > <'a:: opt "" -a\n'> <'|a@unset@2@unset@|2|\n'> <'a:: opt "" -ab\n'> <'|a@b@2@unset@|2|\n'> <'a:: opt "" -a b\n'> <'|a@unset@2@unset@|2|\n'> <'a:: opt "" -a -a\n'> <'|a@unset@2@unset@|a@unset@3@unset@|3|\n'> <'a:: opt "" -:a:\n'> <'|?@unset@1@bad option: `-:\'@bad option: `-:\'|a@:@2@unset@|2|\n'> <'= opt ""\n'> <'|1|\n'> <': opt ""\n'> <'|1|\n'> <'\'\' opt ""\n'> <'|1|\n'> <'a:a opt "" -a\n'> < '|?@unset@2@option `-a\' requires an argument@option `-a\' requires an argument|2|\n' > <'a::a opt "" -a\n'> <'|a@unset@2@unset@|2|\n'> <'ab:c:: opt "" -abc -cba -bac\n'> <'|a@unset@1@unset@|b@c@2@unset@|c@ba@3@unset@|b@ac@4@unset@|4|\n'> <'\'\' opt abc 0 "" --abc\n'> <'|abc@unset@2@unset@|2|\n'> <'\'\' opt abc no_argument "" --abc\n'> <'|abc@unset@2@unset@|2|\n'> <'\'\' opt abc no_argument "" --abc=foo\n'> < '|?@unset@2@option `--abc\' doesn\'t allow an argument@option `--abc\' doesn\'t allow an argument|2|\n' > <'\'\' opt abc no_argument "" --abc foo\n'> <'|abc@unset@2@unset@|2|\n'> <'\'\' opt abc 1 "" --abc=foo\n'> <'|abc@foo@2@unset@|2|\n'> <'\'\' opt abc required_argument "" --abc foo\n'> <'|abc@foo@3@unset@|3|\n'> <'\'\' opt abc required_argument "" --abc=\n'> <'|abc@@2@unset@|2|\n'> <'\'\' opt abc required_argument "" --abc\n'> < '|?@unset@2@option `--abc\' requires an argument@option `--abc\' requires an argument|2|\n' > <'\'\' opt abc 2 "" --abc\n'> <'|abc@unset@2@unset@|2|\n'> <'\'\' opt abc optional_argument "" --abc=\n'> <'|abc@@2@unset@|2|\n'> <'\'\' opt abc optional_argument "" --abc=foo\n'> <'|abc@foo@2@unset@|2|\n'> <'\'\' opt abc optional_argument "" --abc --abc\n'> <'|abc@unset@2@unset@|abc@unset@3@unset@|3|\n'> <'\'\' opt abc 0 abcd 0 "" --abc\n'> <'|abc@unset@2@unset@|2|\n'> <'\'\' opt abc 0 abd 0 "" --ab\n'> <'|?@unset@2@option `--ab\' is ambiguous@option `--ab\' is ambiguous|2|\n'> <'\'\' opt abc 0 abcd 0 "" --ab\n'> <'|?@unset@2@option `--ab\' is ambiguous@option `--ab\' is ambiguous|2|\n'> <'\'\' opt abc 0 abc 1 "" --ab\n'> <'|abc@unset@2@unset@|2|\n'> <'\'\' opt abc 0 abc 1 "" --abc\n'> <'|abc@unset@2@unset@|2|\n'> <'\'\' opt abc 0 abc 1 "" --ab\n'> <'|abc@unset@2@unset@|2|\n'> <'\'\' opt abc 0 acd 0 "" --ab\n'> <'|abc@unset@2@unset@|2|\n'> < 'abc:d:e::f:: opt ab 0 ac 1 bc 2 cd 1 cde 2 "" -abcdef -a -f -c --a --a= --b=foo -fg\n' > < '|a@unset@1@unset@|b@unset@1@unset@|c@def@2@unset@|a@unset@3@unset@|f@unset@4@unset@|c@--a@6@unset@|?@unset@7@option `--a\' is ambiguous@option `--a\' is ambiguous|bc@foo@8@unset@|f@g@9@unset@|9|\n' > <': \'\' \'\' a\n'> <'|1|getopts_long: invalid variable name: `\'\n'> <': 1a \'\'\n'> <'|1|getopts_long: invalid variable name: `1a\'\n'> <'- a\n'> <'|1|getopts_long: invalid option specification: `-\'\n'> <':a::a:abcd o ab 1 abc 1 abd 1 abe 1 abc 2 \'\' -aa --ab 1 --abc\n'> < '|a@a@2@unset@|ab@1@4@unset@|:@abc@5@option `--abc\' requires an argument@|5|\n' > <':\n'> <'|1|getopts_long: not enough arguments\n'> < '\'\\[$\' o -- 0 \' \' 1 \'#\' required_argument \'\' \'-\\\\\\[$\' --\\ =a --\\#=\\$\\$\n' > < '|\\@unset@1@unset@|\\@unset@1@unset@|\\@unset@1@unset@|[@unset@1@unset@|$@unset@2@unset@| @a@3@unset@|#@$$@4@unset@|4|\n' > <': o a 1 b 2 c\n'> < '|1|getopts_long: long option specifications must end in an empty argument\n' > <': o a 1 b 2\n'> < '|1|getopts_long: long option specifications must end in an empty argument\n' > <': o a 1 b 2 c 3 \'\' --c\n'> <'|1|getopts_long: invalid long option type: `3\'\n'> <'": " o " " 1 \'\' "- " "-- =1"\n'> <'| @unset@1@unset@| @unset@2@unset@| @1@3@unset@|3|\n'> <': o a 1 \'\' --c\n'> <'|:@c@2@bad option: `--c\'@|2|\n'> <': o a 1 \'\' --c=foo\n'> <'|:@c@2@bad option: `--c\'@|2|\n'> <': o ab 1 ac 1 ad 1 a 1 \'\' --a=1\n'> <'|a@1@2@unset@|2|\n'> ] ) ) ] ) ] spids: [2809 2822] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] )