5

我正在为一个项目制作一个简单的外壳,我希望像在 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 模块可以做到这一点?任何有关解决方案的建议将不胜感激。

4

1 回答 1

8

Ruby 有以下模块Shellwords

require "shellwords"

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

'Test "hello world" foo'.shellsplit
# => ["Test", "hello world", "foo"]
于 2013-06-26T07:26:01.873 回答