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
-
.shellwords(line) ⇒ Object
Split text into an array of tokens in the same way the UNIX Bourne shell does.
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 |