如何在Ruby中拆分参数字符串Bash样式?

时间:2013-06-26 07:22:39

标签: ruby ruby-2.0

我正在为一个项目创建一个简单的shell,我希望像在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 个答案:

答案 0 :(得分:8)

Ruby有模块Shellwords

require "shellwords"

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

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