Ruby - 给定ENV变量的字符串如何获取它们的值

时间:2017-04-27 15:31:20

标签: ruby string environment-variables

说我有

str = "DISABLE_THINGY=true -p my_profile"

要获取DISABLE_THINGYtrue)的值,我可以使用

str.partition("DISABLE_THINGY=").last.split(' ').first

我不想这样做。

必须有一个库可以解析所有这些。

有人知道更好的方法吗?

2 个答案:

答案 0 :(得分:2)

选择的答案太复杂,无法解决这么简单的问题。正则表达式很棒,但它们越复杂,它们就越有可能出错:

str = "DISABLE_THINGY=true -p my_profile"
str[/\w+=(\w+)/, 1] # => "true"

/\w+=(\w+)/只是寻找"字"由=加入。

有关详细信息,请参阅String's [] method

如果您有多项作业并希望全部捕获它们,或者想要捕获这一项的名称和价值:

str = "DISABLE_THINGY=true -p my_profile"
str.scan(/\w+=\w+/).map { |s| s.split('=') } # => [["DISABLE_THINGY", "true"]]

返回一个数组数组,这可能很有用,或者,你可以将它转换为Hash:

str.scan(/\w+=\w+/).map { |s| s.split('=') }.to_h # => {"DISABLE_THINGY"=>"true"}

同样地:

str = "DISABLE_THINGY=true FOO=bar -p my_profile"
str.scan(/\w+=\w+/).map { |s| s.split('=') } # => [["DISABLE_THINGY", "true"], ["FOO", "bar"]]
str.scan(/\w+=\w+/).map { |s| s.split('=') }.to_h # => {"DISABLE_THINGY"=>"true", "FOO"=>"bar"}

答案 1 :(得分:1)

看看" Parse command line arguments in a Ruby script"。

如果你的所有论点都没有使用连字符,你可能需要对使用的正则表达式稍作调整,但这应该可以让你到达你需要去的地方。只需使用ARGV.join(' ') var。

替换已接受答案中的str即可

调整上面提供的链接中的正则表达式,使您的用例工作在ENV变量与命令行参数的组合中:

args = Hash[ str.scan(/-{0,2}([^=\s]+)(?:[=\s](\S+))?/) ] => {"DISABLE_THINGY"=>"true", "p"=>"my_profile"}