带引号的Ruby语法

时间:2012-12-06 16:47:17

标签: ruby syntax quotes

我的ruby代码中有以下语句

curlsyntax = "URL = "

restcall = 'http://myurl.com/File?schema=1.5&token=' + auth_token + '&product=http://myurl.com/Product/8283&form=json&productname=http://myurl.com/name/' + productname + '&priority=now'

call = curl + restcall

这给我的是我最后一个开头的引用,即“URL = http ...但我实际上并不希望第一个引用显示它应该是URL =”http

3 个答案:

答案 0 :(得分:3)

您在URL之前看到的引用只是ruby表示字符串的方式 - 它实际上并不是字符串的一部分。要在restcall之前和之后添加双引号,您可以执行以下操作:

call = "#{curlsyntax}\"#{restcall}\""

答案 1 :(得分:1)

这样做:

call = %{URL = "#{restcall}"}

但你应该使用类似http://ruby-doc.org/stdlib-1.9.3/libdoc/open3/rdoc/Open3.html之类的东西进行安全的系统调用。例如:

require 'open3'
require 'shellwords'

command = Shellwords.shelljoin(['curl', 'arg1', 'arg2', 'arg3'])
stdin, stdout, stderr = Open3.popen3({'ENV1' => 'value1', 'ENV2' => 'value2'}, command)

result = stdout.read

通过这种方式,您可以安全地转义传递给命令行的参数,甚至可以将环境变量传递给您的调用。

答案 2 :(得分:1)

手动构建此类查询并不安全。我会选择使用这样的东西:https://github.com/sporkmonger/addressable