1

在 ruby​​ 脚本中,我们可以在控制台中传递这样的参数:

 `ruby r3.rb sam sou "samarth pandey"`

这将在一个数组中接收,但现在我想发送这样的参数

 `ruby sam sou {:sam => abc, :sou => abc}`

那么我该怎么做我不想让我的哈希像字符串一样

 `ruby sam sou "{:sam => abc, :sou => abc}"`
4

1 回答 1

3

没有引号就无法传递散列,因为 shell 会识别>为输出重定向并将脚本的输出通过管道传输到名为abc}.

编辑:

使用 Ruby 1.9 Hash 语法,您可以执行以下操作:

foo.rb:

p eval(ARGV.join(' ').gsub(/: (.+?)([,|}])/, ': "\1"\2'))

在外壳中:

$ ruby foo.rb {lkj: dssd, kjdsh: kldiu} #=> {:lkj=>"dssd", :kjdsh=>"kldiu"}

我认为这不是很优雅,也不是语法有效的 Ruby,因为缺少值的引号,但这将是您任务的解决方案。

于 2012-09-21T21:30:03.083 回答