(command.CommandList
  children: [
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'../string.lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'../bool.lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <test_k_string_contains>
      name: test_k_string_contains
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertTrue>
              more_env: []
              words: [{<assertTrue>} {(DQ <'241345 contains 1'>)} {(DQ <'k_string_contains 1 241345'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertTrue>
              more_env: []
              words: [{<assertTrue>} {(DQ <'d3dabcd contains a'>)} {(DQ <'k_string_contains a d3dabcd'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertTrue>
              more_env: []
              words: [{<assertTrue>} {(DQ <'-- contains -'>)} {(DQ <'k_string_contains - --'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertFalse>
              more_env: []
              words: [
                {<assertFalse>}
                {(DQ <'acd does not contain b'>)}
                {(DQ <'k_string_contains b acd'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_get_line>
      name: test_k_string_get_line
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'line1='> (DQ <'Hello world!'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'line2='> (DQ <'This is some text'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'line3='> (DQ <'And this is more'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'str='> 
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <printf>
                          more_env: []
                          words: [
                            {<printf>}
                            {
                              (DQ <'%s'> <Id.Lit_BadBackslash '\\'> <'n%s'> <Id.Lit_BadBackslash '\\'> 
                                <'n%s'>
                              )
                            }
                            {(DQ (${ Id.VSub_Name line1))}
                            {(DQ (${ Id.VSub_Name line2))}
                            {(DQ (${ Id.VSub_Name line3))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ (${ Id.VSub_Name line1))}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_get_line>
                          more_env: []
                          words: [{<k_string_get_line>} {<1>} {(DQ (${ Id.VSub_Name str))}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ (${ Id.VSub_Name line2))}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_get_line>
                          more_env: []
                          words: [{<k_string_get_line>} {<2>} {(DQ (${ Id.VSub_Name str))}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ (${ Id.VSub_Name line3))}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_get_line>
                          more_env: []
                          words: [{<k_string_get_line>} {<3>} {(DQ (${ Id.VSub_Name str))}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_ends_with>
      name: test_k_string_ends_with
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertTrue>
              more_env: []
              words: [{<assertTrue>} {(DQ <'12345 ends with 5'>)} {(DQ <'k_string_ends_with 5 12345'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertFalse>
              more_env: []
              words: [
                {<assertFalse>}
                {(DQ <'12345 does not end with 6'>)}
                {(DQ <'k_string_ends_with 6 12345'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertTrue>
              more_env: []
              words: [{<assertTrue>} {(DQ <'abcd ends with d'>)} {(DQ <'k_string_ends_with d abcd'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertTrue>
              more_env: []
              words: [{<assertTrue>} {(DQ <'-- ends with -'>)} {(DQ <'k_string_ends_with - --'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertFalse>
              more_env: []
              words: [
                {<assertFalse>}
                {(DQ <'- does not end with --'>)}
                {(DQ <'k_string_ends_with -- -'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertFalse>
              more_env: []
              words: [
                {<assertFalse>}
                {(DQ <'abcd does not end with b'>)}
                {(DQ <'k_string_ends_with b abcd'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_starts_with>
      name: test_k_string_starts_with
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertTrue>
              more_env: []
              words: [
                {<assertTrue>}
                {(DQ <'12345 starts with 1'>)}
                {(DQ <'k_string_starts_with 1 12345'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertTrue>
              more_env: []
              words: [{<assertTrue>} {(DQ <'abcd starts with a'>)} {(DQ <'k_string_starts_with a abcd'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertTrue>
              more_env: []
              words: [{<assertTrue>} {(DQ <'-- starts with -'>)} {(DQ <'k_string_starts_with - --'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertFalse>
              more_env: []
              words: [
                {<assertFalse>}
                {(DQ <'- does not start with --'>)}
                {(DQ <'k_string_starts_with -- -'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertFalse>
              more_env: []
              words: [
                {<assertFalse>}
                {(DQ <'abcd does not start with b'>)}
                {(DQ <'k_string_starts_with b abcd'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_lower>
      name: test_k_string_lower
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'ABC to lower'>)}
                {<abc>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_lower>
                          more_env: []
                          words: [{<k_string_lower>} {<ABC>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'Abc to lower'>)}
                {<abc>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_lower>
                          more_env: []
                          words: [{<k_string_lower>} {<Abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'123 to lower'>)}
                {<123>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_lower>
                          more_env: []
                          words: [{<k_string_lower>} {<123>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'D-e+F to lower'>)}
                {<d-e> <Id.Lit_Other '+'> <f>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_lower>
                          more_env: []
                          words: [{<k_string_lower>} {<D-e> <Id.Lit_Other '+'> <F>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_upper>
      name: test_k_string_upper
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'abc to upper'>)}
                {<ABC>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_upper>
                          more_env: []
                          words: [{<k_string_upper>} {<abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'Abc to upper'>)}
                {<ABC>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_upper>
                          more_env: []
                          words: [{<k_string_upper>} {<Abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'123 to upper'>)}
                {<123>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_upper>
                          more_env: []
                          words: [{<k_string_upper>} {<123>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'D-e+F to upper'>)}
                {<D-E> <Id.Lit_Other '+'> <F>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_upper>
                          more_env: []
                          words: [{<k_string_upper>} {<D-e> <Id.Lit_Other '+'> <F>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_pad_right>
      name: test_k_string_pad_right
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'Pad to 8 spaces'>)}
                {(DQ <'foo     '>)}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_pad_right>
                          more_env: []
                          words: [{<k_string_pad_right>} {<8>} {<foo>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_pad_left>
      name: test_k_string_pad_left
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'Pad to 8 spaces'>)}
                {(DQ <'     foo'>)}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_pad_left>
                          more_env: []
                          words: [{<k_string_pad_left>} {<8>} {<foo>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_remove_start>
      name: test_k_string_remove_start
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'abc remove a from start'>)}
                {<bc>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_remove_start>
                          more_env: []
                          words: [{<k_string_remove_start>} {<a>} {<abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'aabc remove a from start'>)}
                {<abc>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_remove_start>
                          more_env: []
                          words: [{<k_string_remove_start>} {<a>} {<aabc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'abc remove b from start'>)}
                {<abc>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_remove_start>
                          more_env: []
                          words: [{<k_string_remove_start>} {<b>} {<abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'abc remove c from start'>)}
                {<abc>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_remove_start>
                          more_env: []
                          words: [{<k_string_remove_start>} {<c>} {<abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'abc remove d from start'>)}
                {<abc>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_remove_start>
                          more_env: []
                          words: [{<k_string_remove_start>} {<d>} {<abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_remove_end>
      name: test_k_string_remove_end
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'abc remove a from end'>)}
                {<abc>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_remove_end>
                          more_env: []
                          words: [{<k_string_remove_end>} {<a>} {<abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'abc remove b from end'>)}
                {<abc>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_remove_end>
                          more_env: []
                          words: [{<k_string_remove_end>} {<b>} {<abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'abc remove c from end'>)}
                {<ab>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_remove_end>
                          more_env: []
                          words: [{<k_string_remove_end>} {<c>} {<abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'abc remove d from end'>)}
                {<abc>}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_remove_end>
                          more_env: []
                          words: [{<k_string_remove_end>} {<d>} {<abc>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_join>
      name: test_k_string_join
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'a joined by hyphen'>)}
                {(DQ <a>)}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_join>
                          more_env: []
                          words: [{<k_string_join>} {(DQ <->)} {<a>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'a, b joined by hyphen'>)}
                {(DQ <a-b>)}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_join>
                          more_env: []
                          words: [{<k_string_join>} {(DQ <->)} {<a>} {<b>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'a, b, c joined by hyphen'>)}
                {(DQ <a-b-c>)}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_join>
                          more_env: []
                          words: [{<k_string_join>} {(DQ <->)} {<a>} {<b>} {<c>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'a, b, c joined by nothing'>)}
                {(DQ <abc>)}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_join>
                          more_env: []
                          words: [{<k_string_join>} {(DQ )} {<a>} {<b>} {<c>}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <test_k_string_trim>
      name: test_k_string_trim
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'\'   a\' trimmed'>)}
                {(DQ <a>)}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_trim>
                          more_env: []
                          words: [{<k_string_trim>} {(DQ <'   a'>)}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'\'a\t\' trimmed'>)}
                {(DQ <a>)}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_trim>
                          more_env: []
                          words: [{<k_string_trim>} {(DQ <'a\t'>)}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'\'   a   \' trimmed'>)}
                {(DQ <a>)}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_trim>
                          more_env: []
                          words: [{<k_string_trim>} {(DQ <'   a   '>)}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <assertEquals>
              more_env: []
              words: [
                {<assertEquals>}
                {(DQ <'\'   a b c\t\' trimmed'>)}
                {(DQ <'a b c'>)}
                {
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <k_string_trim>
                          more_env: []
                          words: [{<k_string_trim>} {(DQ <'   a b c\t'>)}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
  ]
)