(command.Pipeline children: [ (command.BraceGroup children: [ (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:9) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:10)) (OF) } here_end_span_id: 15 stdin_parts: [('sayIt:\n') ('\t$(foreach b,$(BUILT_INS),echo XXX $(b:$X=) YYY;)\n')] ) ] ) (C {(cat)} {(Makefile)}) ] ) (command.Simple words: [{(make)} {(-f)} {(-)} {(sayIt)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:33) fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(sed)} {(-n)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/.*XXX \\(.*\\) YYY.*/\\1/p' span_id:45))}) (C {(sort)}) (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bad) op: assign_op.Equal rhs: {(0)} spids: [57] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:61) cond: [(C {(read)} {(builtin)})] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:base) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:72) command_list: (command.CommandList children: [ (C {(expr)} {(DQ ($ Id.VSub_DollarName '$builtin'))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'git-\\(.*\\)' span_id:82))} ) ] ) ) } spids: [71] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:x) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:88) command_list: (command.CommandList children: [ (C {(sed)} {(-ne)} {(SQ (Token id:Id.Lit_Chars val:'s/.*{ "' span_id:94)) ($ Id.VSub_DollarName '$base') (SQ (Token id:Id.Lit_Chars val:'", \\(cmd_[^, ]*\\).*/' span_id:98)) ($ Id.VSub_DollarName '$base') (SQ (Token id:Id.Lit_Chars val:'\t\\1/p' span_id:102)) } {(git.c)} ) ] ) ) } spids: [87] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$x'))})] action: [ (C {(echo)} { (DQ ($ Id.VSub_DollarName '$base') (' is builtin but not listed in git.c command list') ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bad) op: assign_op.Equal rhs: {(1)} spids: [131] ) ] ) ] spids: [109 120] ) ] ) (command.ForEach iter_name: sfx iter_words: [{(sh)} {(perl)} {(py)}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(-f)} { (DQ ($ Id.VSub_DollarName '$builtin') (.) ($ Id.VSub_DollarName '$sfx') ) } ) ] action: [ (C {(echo)} { (DQ ($ Id.VSub_DollarName '$base') (' is builtin but ') ($ Id.VSub_DollarName '$builtin') (.) ($ Id.VSub_DollarName '$sfx') (' still exists') ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bad) op: assign_op.Equal rhs: {(1)} spids: [182] ) ] ) ] spids: [154 167] ) ] ) ] ) ) ] ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:195) arg_word: {($ Id.VSub_DollarName '$bad')} ) ] ) ] negated: F )