(command.CommandList
  children: [
    (C {(Id.KW_Set set)} {(-o)} {(nounset)})
    (C {(Id.KW_Set set)} {(-o)} {(pipefail)})
    (C {(Id.KW_Set set)} {(-o)} {(errexit)})
    (C {(readonly)} 
      {(Id.Lit_VarLike 'FILES=') 
        (sh_array_literal
          left: (Token id:Id.Op_LParen val:'(' span_id:77)
          words: [
            {(../) (Id.Lit_Star '*') (.sh)}
            {(../) (Id.Lit_Star '*') (/) (Id.Lit_Star '*') (.sh)}
            {(../) (Id.Lit_Star '*') (.py)}
            {(../) (Id.Lit_Star '*') (/) (Id.Lit_Star '*') (.py)}
            {(../) (Id.Lit_Star '*') (/) (Id.Lit_Star '*') (/) (Id.Lit_Star '*') (.py)}
          ]
        )
      }
    )
    (command.ShFunction
      name: test-awk
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: awk
              iter_words: [
                {(gawk)}
                {(mawk)}
                {(word_part.TildeSub token:(Token id:Id.Lit_TildeLike val:'~' span_id:131)) 
                  (/git/bwk/bwk)
                }
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(echo)} {(---)})
                    (C {(echo)} {($ Id.VSub_DollarName '$awk')})
                    (C {(echo)} {(---)})
                    (command.TimeBlock
                      pipeline: 
                        (command.ForEach
                          iter_name: i
                          iter_words: [
                            (word.BracedTree
                              parts: [(word_part.BracedRange kind:Id.Range_Int start:1 end:10 step:1)]
                            )
                          ]
                          do_arg_iter: F
                          body: 
                            (command.DoGroup
                              children: [
                                (C {($ Id.VSub_DollarName '$awk')} 
                                  {
                                    (SQ (Token id:Id.Lit_Chars val:'\n' span_id:172) 
                                      (Token
                                        id: Id.Lit_Chars
                                        val: '      { \n'
                                        span_id: 173
                                      ) (Token id:Id.Lit_Chars val:'        line = tolower($0)\n' span_id:174) 
                                      (Token
                                        id: Id.Lit_Chars
                                        val: '        num_lines += 1\n'
                                        span_id: 175
                                      ) (Token id:Id.Lit_Chars val:'\n' span_id:176) 
                                      (Token
                                        id: Id.Lit_Chars
                                        val: '        # NOTE: gawk has length(); mawk does not\n'
                                        span_id: 177
                                      ) (Token id:Id.Lit_Chars val:'        if (!(line in unique)) {\n' span_id:178) 
                                      (Token
                                        id: Id.Lit_Chars
                                        val: '          num_unique += 1\n'
                                        span_id: 179
                                      ) (Token id:Id.Lit_Chars val:'        }\n' span_id:180) 
                                      (Token
                                        id: Id.Lit_Chars
                                        val: '        unique[line] += 1\n'
                                        span_id: 181
                                      ) (Token id:Id.Lit_Chars val:'      }\n' span_id:182) 
                                      (Token
                                        id: Id.Lit_Chars
                                        val: '      END {\n'
                                        span_id: 183
                                      ) (Token id:Id.Lit_Chars val:'        print "unique lines: " num_unique\n' span_id:184) 
                                      (Token
                                        id: Id.Lit_Chars
                                        val: '        print "total lines: " num_lines\n'
                                        span_id: 185
                                      ) (Token id:Id.Lit_Chars val:'      }\n' span_id:186) (Token id:Id.Lit_Chars val:'      ' span_id:187)
                                    )
                                  } 
                                  {
                                    (DQ 
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:FILES span_id:192)
                                        bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                      )
                                    )
                                  }
                                )
                              ]
                            )
                        )
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: test-python
      body: 
        (command.BraceGroup
          children: [
            (command.TimeBlock
              pipeline: 
                (command.ForEach
                  iter_name: i
                  iter_words: [
                    (word.BracedTree
                      parts: [(word_part.BracedRange kind:Id.Range_Int start:1 end:10 step:1)]
                    )
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(python)} {(-S)} {(-c)} 
                          {
                            (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) 
                              (Token
                                id: Id.Lit_Chars
                                val: 'import collections\n'
                                span_id: 249
                              ) (Token id:Id.Lit_Chars val:'import sys\n' span_id:250) (Token id:Id.Lit_Chars val:'\n' span_id:251) 
                              (Token
                                id: Id.Lit_Chars
                                val: 'num_lines = 0\n'
                                span_id: 252
                              ) (Token id:Id.Lit_Chars val:'num_unique = 0\n' span_id:253) 
                              (Token
                                id: Id.Lit_Chars
                                val: 'unique = collections.defaultdict(int)\n'
                                span_id: 254
                              ) (Token id:Id.Lit_Chars val:'\n' span_id:255) 
                              (Token
                                id: Id.Lit_Chars
                                val: 'for path in sys.argv[1:]:\n'
                                span_id: 256
                              ) (Token id:Id.Lit_Chars val:'  with open(path) as f:\n' span_id:257) 
                              (Token
                                id: Id.Lit_Chars
                                val: '    for line in f:\n'
                                span_id: 258
                              ) (Token id:Id.Lit_Chars val:'      line = line.lower()\n' span_id:259) 
                              (Token
                                id: Id.Lit_Chars
                                val: '      num_lines += 1\n'
                                span_id: 260
                              ) (Token id:Id.Lit_Chars val:'\n' span_id:261) 
                              (Token
                                id: Id.Lit_Chars
                                val: '      if line not in unique:\n'
                                span_id: 262
                              ) (Token id:Id.Lit_Chars val:'        num_unique += 1\n' span_id:263) 
                              (Token
                                id: Id.Lit_Chars
                                val: '      unique[line] += 1\n'
                                span_id: 264
                              ) (Token id:Id.Lit_Chars val:'\n' span_id:265) 
                              (Token
                                id: Id.Lit_Chars
                                val: 'print "unique lines: ", num_unique\n'
                                span_id: 266
                              ) (Token id:Id.Lit_Chars val:'print "total lines: ", num_lines\n' span_id:267) 
                              (Token
                                id: Id.Lit_Chars
                                val: '      '
                                span_id: 268
                              )
                            )
                          } 
                          {
                            (DQ 
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:FILES span_id:273)
                                bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                              )
                            )
                          }
                        )
                      ]
                    )
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: test-wc
      body: 
        (command.BraceGroup
          children: [
            (command.TimeBlock
              pipeline: 
                (command.ForEach
                  iter_name: i
                  iter_words: [
                    (word.BracedTree
                      parts: [(word_part.BracedRange kind:Id.Range_Int start:1 end:10 step:1)]
                    )
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.Pipeline
                          children: [
                            (C {(cat)} 
                              {
                                (DQ 
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:FILES span_id:317)
                                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                  )
                                )
                              }
                            )
                            (C {(wc)} {(-c)})
                          ]
                          negated: F
                        )
                      ]
                    )
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: files
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} 
              {
                (DQ 
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:FILES span_id:347)
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                )
              }
            )
            (C {(echo)} 
              {
                (DQ 
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:FILES span_id:360)
                    prefix_op: (Id.VSub_Pound)
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  ) (' files')
                )
              }
            )
          ]
        )
    )
    (C {(DQ ($ Id.VSub_At '$@'))})
  ]
)