【问题标题】:convert space separated string in bash to list in ruby将bash中的空格分隔字符串转换为ruby中的列表
【发布时间】:2018-02-06 02:44:10
【问题描述】:

我有一个以空格分隔的 IP 字符串,我将其导出到要迭代的 Vagrantfile。

export IP="10.10.10.10 10.10.10.11"

我想对此执行操作,使其成为 vagrantfile 中的列表以进行迭代。

["10.10.10.10", "10.10.10.11"]

这样做的方法是什么?

【问题讨论】:

  • 试试ENV['IP'].split(' ')
  • 感谢方兴,但是我尝试的时候好像遇到了错误 ENV['IP'].split(' ') -bash: syntax error near unexpected token ' '' 也试过了在 vagrantfile 消息中使用相同的消息:NoMethodError: undefined method `split' for nil:NilClass 我是否使用不正确?对红宝石完全陌生

标签: ruby bash vagrantfile


【解决方案1】:

尝试在 bash 中自己弄清楚:

$ export IP="10.10.10.10 10.10.10.11"
$ irb  # interactive ruby
> puts ENV['IP']  # make sure IP is not nil
10.10.10.10 10.10.10.11 # output
> IPs = ENV['IP'].split 
> puts IPs

Vagrantfile是一个Ruby脚本,所以你可以在里面使用ENV['IP'].split

【讨论】:

  • 你的转义是多余的。
【解决方案2】:

以下内容应该是稳健的。您无需担心字符串开头或结尾的空格字符或不规则的空格字符序列。

"10.10.10.10 10.10.10.11".scan(/\S+/)
# => ["10.10.10.10", "10.10.10.11"]

【讨论】:

  • 感谢@sawa 和@fangxing。如果我直接使用 vagrantfile CFG_IP = "10.10.10.11 10.10.10.10".scan(/\S+/) 中的 IP,这两种解决方案都对我有用。以上对我来说非常有效,并且为我旋转了 2 个虚拟机而没有错误。如何替换 vagrant 文件中的导出变量?我尝试了以下方法:CFG_IP = ENV['LIST_OF_IP'].scan(/\S+/) 这引发了一个错误,说 Message: NoMethodError: undefined method scan' `
【解决方案3】:

你可以直接使用Split,就像例子中一样,

" now's  the time".split        
=> ["now's", "the", "time"]
>> "10.10.10.10 10.10.10.11".split
=> ["10.10.10.10", "10.10.10.11"]
>> "10.10.10.10   10.10.10.11".split
=> ["10.10.10.10", "10.10.10.11"]
>> "   10.10.10.10   10.10.10.11".split
=> ["10.10.10.10", "10.10.10.11"]
>> "".split
=> []

阅读文档here

要在 vagrant 文件中包含变量,请参考 this

【讨论】:

    【解决方案4】:

    以简单的方式使用拆分

    "10.10.10.10 10.10.10.11".split(' ')
    => ["10.10.10.10", "10.10.10.11"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多