(command.CommandList children: [ (command.Simple blame_tok:<set> more_env:[] words:[{<set>} {<-e>}] redirects:[] do_fork:T) (command.AndOr children: [ (command.Simple blame_tok: <command> more_env: [] words: [{<command>} {<-v>} {<tput>}] redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})] do_fork: T ) (command.Simple blame_tok: <exec> more_env: [] words: [{<exec>} {<grep>} {<-v>} {(DQ <'^begin '>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'header_pattern='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'header_pattern='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'header_pattern='> name:header_pattern) op: assign_op.Equal rhs: {(SQ <'[0-9]+\\.\\.[0-9]+'>)} ) ] redirects: [] ) (command.Simple blame_tok: <read> more_env: [(EnvPair left:<Id.Lit_VarLike 'IFS='> name:IFS val:(rhs_word__Empty))] words: [{<read>} {<-r>} {<header>}] 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.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {(DQ ($ Id.VSub_DollarName header))} right: {($ Id.VSub_DollarName header_pattern)} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'count='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'count='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'count='> name:count) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name header> var_name: header suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 3>}) right: <Id.Arith_RBrace _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'index='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'index='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'index='> name:index) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'failures='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'failures='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'failures='> name:failures) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'skipped='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'skipped='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skipped='> name:skipped) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'name='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'name='> name:name) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'count_column_width='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'count_column_width='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'count_column_width='> name: count_column_width ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Star left: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name count> var_name: count prefix_op: <Id.VSub_Pound '#'> right: <Id.Right_DollarBrace '}'> ) } right: {<Id.Lit_Digits 2>} ) right: {<Id.Lit_Digits 2>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] spids: [47 62] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(DQ <'%s'> <Id.Lit_BadBackslash '\\'> <n>)} {(DQ ($ Id.VSub_DollarName header))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <exec> more_env: [] words: [{<exec>} {<cat>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShFunction name_tok: <update_screen_width> name: update_screen_width body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'screen_width='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'screen_width='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'screen_width='> name:screen_width) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <tput> more_env: [] words: [{<tput>} {<cols>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'count_column_left='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'count_column_left='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'count_column_left='> name: count_column_left ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: {($ Id.VSub_DollarName screen_width)} right: {($ Id.VSub_DollarName count_column_width)} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <trap> more_env: [] words: [{<trap>} {<update_screen_width>} {<WINCH>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <update_screen_width> more_env: [] words: [{<update_screen_width>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <begin> name: begin body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <go_to_column> more_env: [] words: [{<go_to_column>} {<0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf_with_truncation> more_env: [] words: [ {<printf_with_truncation>} { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: {($ Id.VSub_DollarName count_column_left)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } {(DQ <' %s'>)} {(DQ ($ Id.VSub_DollarName name))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <clear_to_end_of_line> more_env: [] words: [{<clear_to_end_of_line>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <go_to_column> more_env: [] words: [{<go_to_column>} {($ Id.VSub_DollarName count_column_left)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'%'> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name count> var_name: count prefix_op: <Id.VSub_Pound '#'> right: <Id.Right_DollarBrace '}'> ) <'s/'> (${ Id.VSub_Name count) ) } {(DQ ($ Id.VSub_DollarName index))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <go_to_column> more_env: [] words: [{<go_to_column>} {<1>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <pass> name: pass body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <go_to_column> more_env: [] words: [{<go_to_column>} {<0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ <' ✓ %s'>)} {(DQ ($ Id.VSub_DollarName name))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <advance> more_env: [] words: [{<advance>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <skip> name: skip body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'reason='> (DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName reason))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'reason='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'reason='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'reason='> name:reason) op: assign_op.Equal rhs: {(DQ <': '> ($ Id.VSub_DollarName reason))} ) ] redirects: [] ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <go_to_column> more_env: [] words: [{<go_to_column>} {<0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(DQ <' - %s (skipped%s)'>)} {(DQ ($ Id.VSub_DollarName name))} {(DQ ($ Id.VSub_DollarName reason))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <advance> more_env: [] words: [{<advance>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <fail> name: fail body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <go_to_column> more_env: [] words: [{<go_to_column>} {<0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set_color> more_env: [] words: [{<set_color>} {<1>} {<bold>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ <' ✗ %s'>)} {(DQ ($ Id.VSub_DollarName name))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <advance> more_env: [] words: [{<advance>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <log> name: log body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <set_color> more_env: [] words: [{<set_color>} {<1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(DQ <' %s'> <Id.Lit_BadBackslash '\\'> <n>)} {(DQ ($ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <clear_color> more_env: [] words: [{<clear_color>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <summary> name: summary body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(DQ <Id.Lit_BadBackslash '\\'> <'n%d test%s'>)} {(DQ ($ Id.VSub_DollarName count))} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <plural> more_env: [] words: [{<plural>} {(DQ ($ Id.VSub_DollarName count))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(DQ <', %d failure%s'>)} {(DQ ($ Id.VSub_DollarName failures))} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <plural> more_env: [] words: [{<plural>} {(DQ ($ Id.VSub_DollarName failures))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] 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 '['>} {(DQ ($ Id.VSub_DollarName skipped))} {<-gt>} {<0>} {<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>} {(DQ <', %d skipped'>)} {(DQ ($ Id.VSub_DollarName skipped))}] redirects: [] do_fork: T ) ] spids: [451 466] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ <Id.Lit_BadBackslash '\\'> <n>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <printf_with_truncation> name: printf_with_truncation body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'width='> (DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'string='> (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] 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 '['>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name string> var_name: string prefix_op: <Id.VSub_Pound '#'> right: <Id.Right_DollarBrace '}'> ) ) } {<-gt>} {(DQ ($ Id.VSub_DollarName width))} {<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>} {(DQ <'%s...'>)} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name string> var_name: string suffix_op: (suffix_op.Slice begin: {<Id.Lit_Digits 0>} length: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: {($ Id.VSub_DollarName width)} right: {<Id.Lit_Digits 4>} ) right: <Id.Right_DollarDParen _> ) } ) right: <Id.Arith_RBrace _> ) ) } ] redirects: [] do_fork: T ) ] spids: [527 547] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ <'%s'>)} {(DQ ($ Id.VSub_DollarName string))}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <go_to_column> name: go_to_column body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'column='> (DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[%dG'>)} { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName column)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <clear_to_end_of_line> name: clear_to_end_of_line body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[K'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <advance> name: advance body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <clear_to_end_of_line> more_env: [] words: [{<clear_to_end_of_line>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <clear_color> more_env: [] words: [{<clear_color>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <set_color> name: set_color body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'color='> (DQ ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'weight='> (DQ ($ Id.VSub_Number 2))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[%d;%dm'>)} { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {<Id.Lit_Digits 30>} right: {($ Id.VSub_DollarName color)} ) right: <Id.Right_DollarDParen _> ) } { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName weight))} {<Id.Lit_Equals '='>} {(DQ <bold>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<22>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <clear_color> name: clear_color body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[0m'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <plural> name: plural body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 1))} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <s>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike '_buffer='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_buffer='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_buffer='> name:_buffer) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShFunction name_tok: <buffer> name: buffer body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike '_buffer='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_buffer='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_buffer='> name:_buffer) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name _buffer) (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [{(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <flush> name: flush body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ <'%s'>)} {(DQ ($ Id.VSub_DollarName _buffer))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike '_buffer='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_buffer='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_buffer='> name:_buffer) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <finish> name: finish body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <flush> more_env: [] words: [{<flush>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ <Id.Lit_BadBackslash '\\'> <n>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <trap> more_env: [] words: [{<trap>} {<finish>} {<EXIT>}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <read> more_env: [(EnvPair left:<Id.Lit_VarLike 'IFS='> name:IFS val:(rhs_word__Empty))] words: [{<read>} {<-r>} {<line>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName line))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ <'begin '>) <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <let> more_env: [] words: [{<let>} {<Id.Lit_VarLike 'index+='> <1>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'name='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'name='> name:name) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name line> var_name: line suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '*'> <' '> ($ Id.VSub_DollarName index) <' '>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <buffer> more_env: [] words: [{<buffer>} {<begin>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <flush> more_env: [] words: [{<flush>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ <'ok '>) <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'skip_expr='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'skip_expr='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_expr='> name:skip_expr) op: assign_op.Equal rhs: { (DQ <'ok '> ($ Id.VSub_DollarName index) <' # skip ('> <Id.Lit_BadBackslash '\\'> <'(([^)]*)'> <Id.Lit_BadBackslash '\\'> <'))?'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {(DQ ($ Id.VSub_DollarName line))} right: {($ Id.VSub_DollarName skip_expr)} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <let> more_env: [] words: [{<let>} {<Id.Lit_VarLike 'skipped+='> <1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <buffer> more_env: [] words: [ {<buffer>} {<skip>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name BASH_REMATCH> var_name: BASH_REMATCH bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 2>}) right: <Id.Right_DollarBrace '}'> ) ) } ] redirects: [] do_fork: T ) ] spids: [949 964] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <buffer> more_env: [] words: [{<buffer>} {<pass>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ <'not ok '>) <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <let> more_env: [] words: [{<let>} {<Id.Lit_VarLike 'failures+='> <1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <buffer> more_env: [] words: [{<buffer>} {<fail>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ <'# '>) <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <buffer> more_env: [] words: [ {<buffer>} {<log>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name line> var_name: line suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 2>}) right: <Id.Arith_RBrace _> ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <buffer> more_env: [] words: [{<buffer>} {<summary>}] redirects: [] do_fork: T ) ] )