Module: Shellwords

Defined in:
lib/shellwords.rb

Overview

This module is originally a port of shellwords.pl, but modified to conform to POSIX / SUSv3 (IEEE Std 1003.1-2001).

Examples:

require 'shellwords'
words = Shellwords.shellwords(line)

or

require 'shellwords'
include Shellwords
words = shellwords(line)

Class Method Summary collapse

Class Method Details

.shellwords(line) ⇒ Object

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

See the Shellwords module documentation for an example.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 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