我正在为一个项目创建一个简单的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模块可以做到这一点?任何有关解决方案的建议都将受到赞赏。
答案 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"]