# File lib/shellwords.rb, line 28
  def shellwords(line)
    line = String.new(line) rescue
      raise(ArgumentError, "Argument must be a string")
    line.lstrip!
    words = []
    until line.empty?
      field = ''
      loop do
        if line.sub!(/\A"(([^"\\]|\\.)*)"/, '') then
          snippet = $1.gsub(/\\(.)/, '\1')
        elsif line =~ /\A"/ then
          raise ArgumentError, "Unmatched double quote: #{line}"
        elsif line.sub!(/\A'([^']*)'/, '') then
          snippet = $1
        elsif line =~ /\A'/ then
          raise ArgumentError, "Unmatched single quote: #{line}"
        elsif line.sub!(/\A\\(.)?/, '') then
          snippet = $1 || '\\'
        elsif line.sub!(/\A([^\s\\'"]+)/, '') then
          snippet = $1
        else
          line.lstrip!
          break
        end
        field.concat(snippet)
      end
      words.push(field)
    end
    words
  end