code: func Split(input string) (words []string, err error) {
  	var buf bytes.Buffer
  	words = make([]string, 0)
  
  	for len(input) > 0 {
  		// skip any splitChars at the start
  		c, l := utf8.DecodeRuneInString(input)
  		if strings.ContainsRune(splitChars, c) {
  			input = input[l:]
  			continue
  		} else if c == escapeChar {
  			// Look ahead for escaped newline so we can skip over it
  			next := input[l:]
  			if len(next) == 0 {
  				err = UnterminatedEscapeError
  				return
  			}
  			c2, l2 := utf8.DecodeRuneInString(next)
  			if c2 == '\n' {
  				input = next[l2:]
  				continue
  			}
  		}
  
  		var word string
  		word, input, err = splitWord(input, &buf)
  		if err != nil {
  			return
  		}
  		words = append(words, word)
  	}
  	return
  }
docs: // Split splits a string according to /bin/sh's word-splitting rules. It
  // supports backslash-escapes, single-quotes, and double-quotes. Notably it does
  // not support the $'' style of quoting. It also doesn't attempt to perform any
  // other sort of expansion, including brace expansion, shell expansion, or
  // pathname expansion.
  //
  // If the given input has an unterminated quoted string or ends in a
  // backslash-escape, one of UnterminatedSingleQuoteError,
  // UnterminatedDoubleQuoteError, or UnterminatedEscapeError is returned.