(command.CommandList children: [ (command.ForEach iter_name: filename iter_words: [{(DQ ($ Id.VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:linecount) op: assign_op.Equal rhs: {(DQ <1>)} spids: [20] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple words: [{<read>} {<line>}] more_env: [ (env_pair name: IFS val: {(DQ <Id.Lit_BadBackslash '\\'> <n>)} spids: [28] ) ] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (C {<echo>} {(DQ (${ Id.VSub_Name linecount) <': '> ($ Id.VSub_DollarName '$line'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:linecount) op: assign_op.Equal rhs: { (DQ (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName '$linecount')} right: {<Id.Lit_Digits 1>} ) ) ) } spids: [54] ) ] ) ] ) redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {($ Id.VSub_DollarName '$filename')} ) ] ) ] ) ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] )