(command.CommandList children: [ (command.ShFunction name_tok: <columnize> name: columnize body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <typeset> more_env: [] words: [ {<typeset>} {<-i>} {<Id.Lit_VarLike 'displaywidth='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 1> var_name: 1 suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<80>}) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_Less left: {($ Id.VSub_Pound '#')} right: {<Id.Lit_Digits 2>} ) right: <Id.Op_DRightParen _> redirects: [] ) (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<Id.Lit_VarLike 'colsep='> (SQ <' '>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<Id.Lit_VarLike 'colsep='> (DQ ($ Id.VSub_Number 2))}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.Simple blame_tok: <typeset> more_env: [] words: [ {<typeset>} {<-i>} {<Id.Lit_VarLike 'list_size='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name list> var_name: list prefix_op: <Id.VSub_Pound '#'> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) right: <Id.Right_DollarBrace '}'> ) } ] 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.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_DEqual left: ($ Id.Lit_ArithVarLike list_size) right: {<Id.Lit_Digits 0>} ) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'columnized='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'columnized='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'columnized='> name:columnized) op: assign_op.Equal rhs: { (ShArrayLiteral left: <Id.Op_LParen _> words: [{(SQ <'<empty>'>)}] right: <Id.Right_ShArrayLiteral _> ) } ) ] redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] spids: [140 153] ) ] 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.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_DEqual left: {<Id.Lit_Digits 1>} right: ($ Id.Lit_ArithVarLike list_size) ) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'columnized='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'columnized='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'columnized='> name:columnized) op: assign_op.Equal rhs: { (ShArrayLiteral left: <Id.Op_LParen _> words: [ { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name list> var_name: list bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>}) right: <Id.Right_DollarBrace '}'> ) ) } ] right: <Id.Right_ShArrayLiteral _> ) } ) ] redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] spids: [170 182] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<-i>} {<Id.Lit_VarLike 'nrows='> <0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<-i>} {<Id.Lit_VarLike 'ncols='> <0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <typeset> more_env: [] words: [ {<typeset>} {<-a>} {<Id.Lit_VarLike 'colwidths='> (ShArrayLiteral left: <Id.Op_LParen _> words: [] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<-i>} {<Id.Lit_VarLike 'i='> <0>}] redirects: [] do_fork: T ) (command.ForExpr keyword: <Id.KW_For for> init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: ($ Id.Lit_ArithVarLike i) right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_Less left: ($ Id.Lit_ArithVarLike i) right: ($ Id.Lit_ArithVarLike list_size) ) update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:($ Id.Lit_ArithVarLike i)) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <typeset> more_env: [] words: [ {<typeset>} {<-a>} {<Id.Lit_VarLike 'colwidths='> (ShArrayLiteral left: <Id.Op_LParen _> words: [] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: ($ Id.Lit_ArithVarLike nrows) ) right: <Id.Op_DRightParen _> redirects: [] ) (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: ($ Id.Lit_ArithVarLike ncols) right: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.Binary op_id: Id.Arith_Plus left: ($ Id.Lit_ArithVarLike list_size) right: ($ Id.Lit_ArithVarLike nrows) ) right: {<Id.Lit_Digits 1>} ) right: ($ Id.Lit_ArithVarLike nrows) ) ) right: <Id.Op_DRightParen _> redirects: [] ) (command.Simple blame_tok: <typeset> more_env: [] words: [ {<typeset>} {<-i>} {<Id.Lit_VarLike 'totwidth='> <-> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name colsep> var_name: colsep prefix_op: <Id.VSub_Pound '#'> right: <Id.Right_DollarBrace '}'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<-i>} {<col>}] redirects: [] do_fork: T ) (command.ForExpr keyword: <Id.KW_For for> init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: ($ Id.Lit_ArithVarLike col) right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_LessEqual left: ($ Id.Lit_ArithVarLike col) right: (arith_expr.Binary op_id: Id.Arith_Minus left: ($ Id.Lit_ArithVarLike ncols) right: {<Id.Lit_Digits 1>} ) ) update: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: ($ Id.Lit_ArithVarLike col) ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'colwidth='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'colwidth='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'colwidth='> name: colwidth ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<-i>} {<row>}] redirects: [] do_fork: T ) (command.ForExpr keyword: <Id.KW_For for> init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: ($ Id.Lit_ArithVarLike row) right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_LessEqual left: ($ Id.Lit_ArithVarLike row) right: (arith_expr.Binary op_id: Id.Arith_Minus left: ($ Id.Lit_ArithVarLike nrows) right: {<Id.Lit_Digits 1>} ) ) update: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: ($ Id.Lit_ArithVarLike row) ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<-i>} {<j>}] redirects: [] do_fork: T ) (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: ($ Id.Lit_ArithVarLike j) right: (arith_expr.Binary op_id: Id.Arith_Plus left: ($ Id.Lit_ArithVarLike row) right: (arith_expr.Binary op_id: Id.Arith_Star left: ($ Id.Lit_ArithVarLike nrows) right: ($ Id.Lit_ArithVarLike col) ) ) ) right: <Id.Op_DRightParen _> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_GreatEqual left: ($ Id.Lit_ArithVarLike j) right: ($ Id.Lit_ArithVarLike list_size) ) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] spids: [429 441] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <typeset> more_env: [] words: [ {<typeset>} {<Id.Lit_VarLike 'item='> (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name list> var_name: list bracket_op: (bracket_op.ArrayIndex expr: ($ Id.Lit_ArithVarLike j) ) right: <Id.Right_DollarBrace '}'> ) ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_Less left: ($ Id.Lit_ArithVarLike colwidth) right: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name item> var_name: item prefix_op: <Id.VSub_Pound '#'> right: <Id.Right_DollarBrace '}'> ) } ) right: <Id.Op_DRightParen _> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'colwidth='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'colwidth='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'colwidth='> name: colwidth ) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name item> var_name: item prefix_op: <Id.VSub_Pound '#'> right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'colwidths+='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'colwidths+='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'colwidths+='> name: colwidths ) op: assign_op.PlusEqual rhs: { (ShArrayLiteral left: <Id.Op_LParen _> words: [{($ Id.VSub_DollarName colwidth)}] right: <Id.Right_ShArrayLiteral _> ) } ) ] redirects: [] ) (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: ($ Id.Lit_ArithVarLike totwidth) right: (arith_expr.Binary op_id: Id.Arith_Plus left: ($ Id.Lit_ArithVarLike colwidth) right: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name colsep> var_name: colsep prefix_op: <Id.VSub_Pound '#'> right: <Id.Right_DollarBrace '}'> ) } ) ) right: <Id.Op_DRightParen _> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_Great left: ($ Id.Lit_ArithVarLike totwidth) right: ($ Id.Lit_ArithVarLike displaywidth) ) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)] spids: [508 520] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_LessEqual left: ($ Id.Lit_ArithVarLike totwidth) right: ($ Id.Lit_ArithVarLike displaywidth) ) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)] spids: [532 544] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ForExpr keyword: <Id.KW_For for> init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: ($ Id.Lit_ArithVarLike row) right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_Less left: ($ Id.Lit_ArithVarLike row) right: ($ Id.Lit_ArithVarLike nrows) ) update: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: ($ Id.Lit_ArithVarLike row) ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<-i>} {<Id.Lit_VarLike 'text_size='> <0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <typeset> more_env: [] words: [ {<typeset>} {<-a>} {<Id.Lit_VarLike 'texts='> (ShArrayLiteral left: <Id.Op_LParen _> words: [] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.ForExpr keyword: <Id.KW_For for> init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: ($ Id.Lit_ArithVarLike col) right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_Less left: ($ Id.Lit_ArithVarLike col) right: ($ Id.Lit_ArithVarLike ncols) ) update: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: ($ Id.Lit_ArithVarLike col) ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: ($ Id.Lit_ArithVarLike i) right: (arith_expr.Binary op_id: Id.Arith_Plus left: ($ Id.Lit_ArithVarLike row) right: (arith_expr.Binary op_id: Id.Arith_Star left: ($ Id.Lit_ArithVarLike nrows) right: ($ Id.Lit_ArithVarLike col) ) ) ) right: <Id.Op_DRightParen _> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_GreatEqual left: ($ Id.Lit_ArithVarLike i) right: ($ Id.Lit_ArithVarLike list_size) ) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'item='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'item='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'item='> name: item ) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) ] spids: [649 661] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'item='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'item='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'item='> name:item) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name list> var_name: list bracket_op: (bracket_op.ArrayIndex expr: ($ Id.Lit_ArithVarLike i) ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_ArrayLhsOpen 'texts['> pairs: [ (AssignPair left: <Id.Lit_ArrayLhsOpen 'texts['> lhs: (sh_lhs_expr.IndexedName left: <Id.Lit_ArrayLhsOpen 'texts['> name: texts index: {($ Id.VSub_DollarName text_size)} ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName item))} ) ] redirects: [] ) (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: ($ Id.Lit_ArithVarLike text_size) ) right: <Id.Op_DRightParen _> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_Great left: ($ Id.Lit_ArithVarLike text_size) right: {<Id.Lit_Digits 0>} ) right: <Id.Op_DRightParen _> redirects: [] ) (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name texts> var_name: texts bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Minus left: ($ Id.Lit_ArithVarLike text_size) right: {<Id.Lit_Digits 1>} ) ) right: <Id.Right_DollarBrace '}'> ) } right: {(SQ )} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.UnaryAssign op_id: Id.Node_PostDMinus child: ($ Id.Lit_ArithVarLike text_size) ) right: <Id.Op_DRightParen _> redirects: [] ) (command.Simple blame_tok: <unset> more_env: [] words: [ {<unset>} {<Id.Lit_ArrayLhsOpen 'texts['> ($ Id.VSub_DollarName text_size) <Id.Lit_RBracket ']'> } ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'text_row='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'text_row='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'text_row='> name:text_row) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'text_cell='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'text_cell='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'text_cell='> name:text_cell) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) (command.ForExpr keyword: <Id.KW_For for> init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: ($ Id.Lit_ArithVarLike col) right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_Less left: ($ Id.Lit_ArithVarLike col) right: ($ Id.Lit_ArithVarLike text_size) ) update: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: ($ Id.Lit_ArithVarLike col) ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'fmt='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'fmt='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fmt='> name:fmt) op: assign_op.Equal rhs: { (DQ <'%-'> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name colwidths> var_name: colwidths bracket_op: (bracket_op.ArrayIndex expr: ($ Id.Lit_ArithVarLike col) ) right: <Id.Right_DollarBrace '}'> ) <s> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'text_cell='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'text_cell='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'text_cell='> name: text_cell ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {($ Id.VSub_DollarName fmt)} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name texts> var_name: texts bracket_op: (bracket_op.ArrayIndex expr: ($ Id.Lit_ArithVarLike col) ) right: <Id.Right_DollarBrace '}'> ) ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'text_row+='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'text_row+='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'text_row+='> name: text_row ) op: assign_op.PlusEqual rhs: {(DQ (${ Id.VSub_Name text_cell))} ) ] redirects: [] ) (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_NEqual left: ($ Id.Lit_ArithVarLike col) right: (arith_expr.Binary op_id: Id.Arith_Minus left: ($ Id.Lit_ArithVarLike text_size) right: {<Id.Lit_Digits 1>} ) ) right: <Id.Op_DRightParen _> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'text_row+='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'text_row+='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'text_row+='> name: text_row ) op: assign_op.PlusEqual rhs: {(DQ (${ Id.VSub_Name colsep))} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'columnized+='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'columnized+='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'columnized+='> name: columnized ) op: assign_op.PlusEqual rhs: { (ShArrayLiteral left: <Id.Op_LParen _> words: [{(DQ ($ Id.VSub_DollarName text_row))}] right: <Id.Right_ShArrayLiteral _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] 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.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_Number 0)} right: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name BASH_SOURCE> var_name: BASH_SOURCE bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>}) right: <Id.Right_DollarBrace '}'> ) } ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShFunction name_tok: <print_columns> name: print_columns body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <unset> more_env: [] words: [{<unset>} {<columnized>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<-a>} {<columnized>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<-a>} {<list>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'list='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'list='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'list='> name:list) op: assign_op.Equal rhs: { (ShArrayLiteral left: <Id.Op_LParen _> words: [{($ Id.VSub_Number 1)}] right: <Id.Right_ShArrayLiteral _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <columnize> more_env: [] words: [{<columnize>} {($ Id.VSub_Number 2)} {($ Id.VSub_Number 3)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <typeset> more_env: [] words: [{<typeset>} {<-i>} {<i>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <'==============='>)}] redirects: [] do_fork: T ) (command.ForExpr keyword: <Id.KW_For for> init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: ($ Id.Lit_ArithVarLike i) right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_Less left: ($ Id.Lit_ArithVarLike i) right: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name columnized> var_name: columnized prefix_op: <Id.VSub_Pound '#'> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) right: <Id.Right_DollarBrace '}'> ) } ) update: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: ($ Id.Lit_ArithVarLike i) ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name columnized> var_name: columnized bracket_op: (bracket_op.ArrayIndex expr: {($ Id.VSub_DollarName i)} ) right: <Id.Right_DollarBrace '}'> ) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <print_columns> more_env: [] words: [{<print_columns>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <print_columns> more_env: [] words: [{<print_columns>} {(SQ )}] redirects: [] do_fork: T ) (command.Simple blame_tok: <print_columns> more_env: [] words: [{<print_columns>} {<oneitem>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <print_columns> more_env: [] words: [{<print_columns>} {(SQ <'a 2 c'>)} {<10>} {(SQ <', '>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <print_columns> more_env: [] words: [ {<print_columns>} { (SQ <' one two three\n'> <' 4ne 5wo 6hree\n'> <' 7ne 8wo 9hree\n'> <' 10e 11o 12ree'> ) } {<18>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <print_columns> more_env: [] words: [ {<print_columns>} {(SQ <' 1 two three\n'> <' for 5 six\n'> <' 7 8'>)} {<12>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <print_columns> more_env: [] words: [{<print_columns>} {(SQ <' 1 two 3\n'> <' for 5 six\n'> <' 7 8'>)} {<12>}] redirects: [] do_fork: T ) ] spids: [873 892] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] )