2013-06-26 6 views
5

Ich mache eine einfache Shell für ein Projekt, und ich möchte, dass Argument-Strings genau wie in Bash geparst werden.Wie teile ich eine Argument-String Bash-Stil in Ruby?

foo bar "hello world" fooz 

Sollte sich:

["foo", "bar", "hello world", "fooz"] 

Etc. Bisher wurde CSV::parse_line, die Einstellung der Spalte Trenn " " und .compact die Ausgabe Ich habe mit ing. Die Probleme sind, dass ich jetzt wählen muss, ob ich einfache Anführungszeichen oder doppelte Anführungszeichen unterstützen möchte. CSV unterstützt nicht mehr als ein einzelnes Trennzeichen.

Python hat ein Modul für genau diese shlex genannt:

>>> shlex.split("Test 'hello world' foo") 
['Test', 'hello world', 'foo'] 
>>> shlex.split('Test "hello world" foo') 
['Test', 'hello world', 'foo'] 

es irgendwelche in Ruby Modulen versteckt, die dies tun können? Irgendwelche Vorschläge für eine Lösung würden geschätzt.

+1

Natürlich gibt es: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/shellwords/rdoc/Shellwords.html#method -c-Shellsplit. :) – squiguy

Antwort

8

Ruby hat das Modul Shellwords:

require "shellwords" 

Shellwords.shellsplit('Test "hello world" foo') 
# => ["Test", "hello world", "foo"] 

'Test "hello world" foo'.shellsplit 
# => ["Test", "hello world", "foo"] 
+0

Ich glaube, es ist 'shellsplit', du schlägst mich dazu! – squiguy

+0

@squiguy 'Shellwords # split' ist ein Alias ​​für' Shellwords # shellsplit'. – toro2k

+2

Nach dem Importieren von "Shellwords" können Sie auch "Test" Hallo Welt "foo'.shellsplit" – Hubro