Splits a string into an array of tokens in the same way the UNIX Bourne
shell does.
argv=Shellwords.split('here are "two words"')argv#=> ["here", "are", "two words"]
+String#shellsplit+ is a shorthand for this function.
argv='here are "two words"'.shellsplitargv#=> ["here", "are", "two words"]
# File lib/shellwords.rb, line 32
def shellsplit(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