【问题标题】:How do I split up an argument string Bash-style in Ruby?如何在 Ruby 中拆分参数字符串 Bash 样式?
【发布时间】:2013-06-26 07:22:39
【问题描述】:

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

【问题讨论】:

标签: ruby ruby-2.0


【解决方案1】:

Ruby 有模块 Shellwords:

require "shellwords"

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

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

【讨论】:

  • 我相信是shellsplit,你抢先了!
  • @squiguy Shellwords#splitShellwords#shellsplit 的别名。
  • 导入“shellwords”后也可以'Test "hello world" foo'.shellsplit
  • @toro2k 啊,我没有读到那么远。我认为在常规字符串 split 恕我直言上使用 shellsplit 会更容易混淆。
  • @Codemonkey 我不知道,但是甚至没有必要 require "shellwords" 使其工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 2011-04-25
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多