(command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [ {(dd)} {(Id.Lit_VarLike 'if=') (/dev/zero)} {(Id.Lit_VarLike 'bs=') (1048576)} {(Id.Lit_VarLike 'count=') (100)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:15) fd: 2 arg_word: {(/dev/null)} ) ] ) (command.Simple words: [{(/usr/bin/time)} {(t/helper/test-sha1)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:24) fd: -1 arg_word: {(/dev/null)} ) ] ) ] negated: F ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:28) cond: [(C {(read)} {(expect)} {(cnt)} {(pfx)})] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$expect'))} arms: [ (case_arm pat_list: [{(SQ (Token id:Id.Lit_Chars val:'#' span_id:50)) (Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:55) ) ] spids: [49 53 57 -1] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:actual) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:63) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$pfx'))}) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$pfx'))}) ] ) (command.Pipeline children: [ (command.Simple words: [ {(dd)} {(Id.Lit_VarLike 'if=') (/dev/zero)} {(Id.Lit_VarLike 'bs=') (1048576)} {(Id.Lit_VarLike 'count=') ($ Id.VSub_DollarName '$cnt') } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:97) fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(perl)} {(-pe)} { (SQ (Token id: Id.Lit_Chars val: 'y/\\000/g/' span_id: 108 ) ) } ) ] negated: F ) ] ) (C {(./t/helper/test-sha1)} {($ Id.VSub_DollarName '$cnt')}) ] negated: F ) ] ) ) } spids: [62] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$expect'))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$actual'))} ) ] action: [ (C {(echo)} { (DQ ('OK: ') ($ Id.VSub_DollarName '$expect') (' ') ($ Id.VSub_DollarName '$cnt') (' ') ($ Id.VSub_DollarName '$pfx') ) } ) ] spids: [124 139] ) ] else_action: [ (command.Simple words: [{(echo)} {(DQ ('OOPS: ') ($ Id.VSub_DollarName '$cnt'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:159) fd: -1 arg_word: {(2)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('expect: ') ($ Id.VSub_DollarName '$expect'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:170) fd: -1 arg_word: {(2)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('actual: ') ($ Id.VSub_DollarName '$actual'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:181) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:190) arg_word: {(1)} ) ] ) ] ) redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:199) fd: -1 here_begin: {(EOF)} here_end_span_id: 222 stdin_parts: [ ('da39a3ee5e6b4b0d3255bfef95601890afd80709 0\n') ('3f786850e387550fdab836ed7e6dc881de23001b 0 a\n') ('5277cbb45a15902137d332d97e89cf8136545485 0 ab\n') ('03cfd743661f07975fa2f1220c5194cbaff48451 0 abc\n') ('3330b4373640f9e4604991e73c7e86bfd8da2dc3 0 abcd\n') ('ec11312386ad561674f724b8cca7cf1796e26d1d 0 abcde\n') ('bdc37c074ec4ee6050d68bc133c6b912f36474df 0 abcdef\n') ('69bca99b923859f2dc486b55b87f49689b7358c7 0 abcdefg\n') ('e414af7161c9554089f4106d6f1797ef14a73666 0 abcdefgh\n') ('0707f2970043f9f7c22029482db27733deaec029 0 abcdefghi\n') ('a4dd8aa74a5636728fe52451636e2e17726033aa 1\n') ('9986b45e2f4d7086372533bb6953a8652fa3644a 1 frotz\n') ('23d8d4f788e8526b4877548a32577543cbaaf51f 10\n') ('8cd23f822ab44c7f481b8c92d591f6d1fcad431c 10 frotz\n') ('f3b5604a4e604899c1233edb3bf1cc0ede4d8c32 512\n') ('b095bd837a371593048136e429e9ac4b476e1bb3 512 frotz\n') ('08fa81d6190948de5ccca3966340cc48c10cceac 1200 xyzzy\n') ('e33a291f42c30a159733dd98b8b3e4ff34158ca0 4090 4G\n') ('#a3bf783bc20caa958f6cb24dd140a7b21984838d 9999 nitfol\n') ] ) ] ) (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:224)) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:234) cond: [(C {(read)} {(cnt)} {(pfx)})] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:actual) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:246) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$pfx'))}) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$pfx'))}) ] ) (command.Pipeline children: [ (command.Simple words: [ {(dd)} {(Id.Lit_VarLike 'if=') (/dev/zero)} {(Id.Lit_VarLike 'bs=') (1048576)} {(Id.Lit_VarLike 'count=') ($ Id.VSub_DollarName '$cnt') } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:280) fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(perl)} {(-pe)} { (SQ (Token id: Id.Lit_Chars val: 'y/\\000/g/' span_id: 291 ) ) } ) ] negated: F ) ] ) (C {(sha1sum)}) (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/ .*//' span_id:309))} ) ] negated: F ) ] ) ) } spids: [245] ) ] ) (C {(echo)} { (DQ ($ Id.VSub_DollarName '$actual') (' ') ($ Id.VSub_DollarName '$cnt') (' ') ($ Id.VSub_DollarName '$pfx') ) } ) ] ) redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:328) fd: -1 here_begin: {(EOF)} here_end_span_id: 351 stdin_parts: [ ('0\n') ('0 a\n') ('0 ab\n') ('0 abc\n') ('0 abcd\n') ('0 abcde\n') ('0 abcdef\n') ('0 abcdefg\n') ('0 abcdefgh\n') ('0 abcdefghi\n') ('1\n') ('1 frotz\n') ('10\n') ('10 frotz\n') ('512\n') ('512 frotz\n') ('1200 xyzzy\n') ('4090 4G\n') ('9999 nitfol\n') ] ) ] ) ] )