(command.CommandList children: [ (command.ShAssignment left: <Id.Lit_VarLike 'indent_level='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'indent_level='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'indent_level='> name:indent_level) op: assign_op.Equal rhs: {(DQ <-1>)} ) ] redirects: [] ) (command.ShFunction name_tok: <print_indent> name: print_indent body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [NUM] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <seq> more_env: [] words: [{<seq>} {<0>} {($ Id.VSub_DollarName indent_level)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-ne>} {(SQ <' '>)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<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.Op_LParen _> pattern: (pat.Words words: [ {(SQ <'('>) <Id.Lit_Star '*'> (SQ <')'>)} {(SQ <'<'>) <Id.Lit_Star '*'> (SQ <'>'>)} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <print_indent> more_env: [] words: [{<print_indent>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName line))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words:[{(SQ <'>'>)} {(SQ <')'>)}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'indent_level='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'indent_level='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'indent_level='> name: indent_level ) 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 indent_level)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <print_indent> more_env: [] words: [{<print_indent>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName line))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words: [{<Id.Lit_Star '*'> (SQ <'>'>)} {<Id.Lit_Star '*'> (SQ <')'>)}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <print_indent> more_env: [] words: [{<print_indent>}] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName line))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/[)>]$//'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'indent_level='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'indent_level='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'indent_level='> name: indent_level ) 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 indent_level)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <print_indent> more_env: [] words: [{<print_indent>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName line))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <tail> more_env: [] words: [{<tail>} {<-c2>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words: [{(SQ <'<'>) <Id.Lit_Star '*'>} {(SQ <'('>) <Id.Lit_Star '*'>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <print_indent> more_env: [] words: [{<print_indent>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'indent_level='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'indent_level='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'indent_level='> name: indent_level ) 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 indent_level)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName line))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <print_indent> more_env: [] words: [{<print_indent>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName line))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [ (Redir op: <Id.Redir_TLess '<<<'> loc: (redir_loc.Fd fd:0) arg: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/</\\n</g'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/>/>\\n/g'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/,/,\\n/g'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) ) } ) ] ) ] )