(command.CommandList children: [ (C {(KW_Set set)} {(-o)} {(nounset)}) (C {(KW_Set set)} {(-o)} {(pipefail)}) (C {(KW_Set set)} {(-o)} {(errexit)}) (command.ShFunction name: count-procs body: (command.BraceGroup children: [ (C {(local)} {(Lit_VarLike 'sh=') ($ VSub_Number '$1')}) (C {(local)} {(Lit_VarLike 'code=') ($ VSub_Number '$2')}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:code) op: Equal rhs: {(SQ <'echo "[pid-of-sh $$]";'>) (DQ (' ') ($ VSub_DollarName '$code'))} ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (command.Pipeline children: [ (command.Simple words: [ {(strace)} {(-e)} {(SQ <'trace=fork,execve'>)} {(-e)} {(SQ <'signal=none'>)} {(-e)} {(SQ <'verbose=none'>)} {(-ff)} {(--)} {($ VSub_DollarName '$sh')} {(-c)} {(DQ ($ VSub_DollarName '$code'))} ] redirects: [(redir.Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})] ) (C {(fgrep)} {(SQ <'[pid'>)}) ] negated: F ) (C {(true)}) ] ) ] ) ) (command.ShFunction name: test-many body: (command.BraceGroup children: [ (command.ForEach iter_name: code iter_words: [{(DQ ($ VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)}) (C {(echo)}) (C {(echo)} {(DQ ('--- ') ($ VSub_DollarName '$code') (' ---'))}) (C {(echo)}) (command.ForEach iter_name: sh iter_words: [{(dash)} {(bash)} {(mksh)} {(zsh)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)}) (C {(echo)}) (C {(echo)} {(DQ ('--- ') ($ VSub_DollarName '$sh') (' ---'))}) (C {(echo)}) (C {(count-procs)} {($ VSub_DollarName '$sh')} {(DQ ($ VSub_DollarName '$code'))} ) ] ) ) ] ) ) ] ) ) (command.ShFunction name: t1 body: (command.BraceGroup children: [ (C {(test-many)} {(SQ <'echo hi'>)} {(SQ <'/bin/echo one; /bin/echo two'>)} {(SQ <'{ /bin/echo one; /bin/echo two; }'>)} {(SQ <'{ echo one; echo two; } | wc -l'>)} {(SQ <'( echo one; echo two ) | wc -l'>)} ) ] ) ) (C {(DQ ($ VSub_At '$@'))}) ] )