(command.CommandList
  children: [
    (command.ShFunction
      name: fn1
      body: 
        (BraceGroup
          children: [
            (C {<echo>} {(DQ <'fn1 here'>)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:x)
                  op: assign_op.Equal
                  rhs: {<5>}
                  spids: [27]
                )
              ]
            )
            (C {<fn3>})
          ]
        )
    )
    (command.ShFunction
      name: fn2
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:name)
                  op: assign_op.Equal
                  rhs: {(DQ <fn2>)}
                  spids: [44]
                )
              ]
            )
            (C {<echo>} {(DQ ($ Id.VSub_DollarName '$name') <' here'>)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:x)
                  op: assign_op.Equal
                  rhs: {<6>}
                  spids: [58]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fn3
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:name)
                  op: assign_op.Equal
                  rhs: {(DQ <fn3>)}
                  spids: [72]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:x)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [78]
                )
              ]
            )
          ]
        )
    )
    (C {<set>} {<-xv>})
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:x) op:assign_op.Equal rhs:{<24>} spids:[92])]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:x) op:assign_op.Equal rhs:{<25>} spids:[95])]
    )
    (command.ForEach
      iter_name: i
      iter_words: [{<0>} {<1>} {<3>}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.DParen
              child: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_PlusEqual
                  left: <Id.Lit_ArithVarLike x>
                  right: <Id.Lit_ArithVarLike i>
                )
            )
          ]
        )
    )
    (C {<set>} {<Id.Lit_Other '+'> <xv>})
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:x) op:assign_op.Equal rhs:{<27>} spids:[131])]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:y) op:assign_op.Equal rhs:{<b>} spids:[134])]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:x) op:assign_op.Equal rhs:{<29>} spids:[137])]
    )
    (C {<echo>} {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<fn3>} {<30>}))})
    (C {<fn3>} {<31>})
    (command.Sentence child:(C {<fn1>}) terminator:<Id.Op_Semi _>)
    (C {<fn3>} {<33>})
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)