public Method

Shellwords.shellwords(line)

Split text into an array of tokens in the same way the UNIX Bourne shell does.

See the Shellwords module documentation for an example.

Source Code

# File 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
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.