2013-06-26 38 views
5

我为一个项目制作了一个简单的shell,并且我想让参数字符串像在Bash中一样被解析。如何在Ruby中分割参数字符串Bash风格?

foo bar "hello world" fooz 

应该改为:

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

等。目前我一直在使用CSV::parse_line,列分隔符设置为" ".compact荷兰国际集团输出。问题是我现在必须选择是否要支持单引号或双引号。 CSV不支持多个分隔字符。

Python有正是这种所谓的shlex模块:

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

是否有任何内置隐藏在Ruby中的模块,可以做到这一点?任何解决方案的建议,将不胜感激。

+1

当然有:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/shellwords/rdoc/Shellwords.html#method -C-shellsplit。 :) – squiguy

回答

8

Ruby有模块Shellwords

require "shellwords" 

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

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

我相信这是'shellsplit',你击败了我! – squiguy

+0

@squiguy'Shellwords#split'是'Shellwords#shellsplit'的别名。 – toro2k

+2

导入“shellwords”后,你也可以做“测试”hello world“foo'.shellsplit” – Hubro