(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: [24]
                )
              ]
            )
            (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: [41]
                )
              ]
            )
            (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: [55]
                )
              ]
            )
          ]
        )
    )
    (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: [69]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:x)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [75]
                )
              ]
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:x) op:assign_op.Equal rhs:{<22>} spids:[82])]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:y) op:assign_op.Equal rhs:{<23>} spids:[85])]
    )
    (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>
                )
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:x) op:assign_op.Equal rhs:{<27>} spids:[116])]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:y) op:assign_op.Equal rhs:{<b>} spids:[119])]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:x) op:assign_op.Equal rhs:{<29>} spids:[122])]
    )
    (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>})
    (C {<source>} {<'../example/dbg-test1.sub'>})
    (command.Sentence
      child: (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
      terminator: <Id.Op_Semi _>
    )
  ]
)