如何在Ruby中获得非插值bash转义?

时间:2017-01-28 04:27:25

标签: ruby

在ruby中,反引号是系统调用,但它们是插值。这很好,因为我可以做到这一点

a = 20.sqrt
`cat #{a}`

但它也很烦人,因为我有时想在我的代码中使用\,但我需要在\\``,因为它是插值和转义。我怎么能避免这个?

3 个答案:

答案 0 :(得分:2)

试试这个

Kernel.`('echo "#{a}"')

逐字打印

#{a}

有趣的是,`实际上是Kernel上的一种方法,你可以像任何其他方法一样调用它。因此传递单引号字符串作为参数。

答案 1 :(得分:0)

在非循环上下文中形成字符串并将其插入到反引号中:

s = %{echo "he\ny"}
puts `#{s}`

答案 2 :(得分:-1)

如果您需要使用转义字符,则可以使用%q:

a = 20
system(%Q{echo '#{a}&%$][/\'})
#=> 20&%$][/

如果您想要字符串插值,可以使用%Q:

%q

这里有关于它的thread。请注意,您可以在%Qsystem之后使用任何分隔符:选择一个不在您的字符串中的分隔符!

我在这里使用了%x{}而不是n或刻度线。它们并不等同,但我只是想显示字符串定义,而不会让线条比现在更复杂。