[英]How can I get a non-interpolation bash escape in Ruby?
在 ruby 中,反引號是系統調用,但它們是插值。 這很好,因為我可以這樣做
a = 20.sqrt
`cat #{a}`
但這也很煩人,因為我有時希望在我的代碼中使用\\
,但我需要在``
\\\\
因為它是插值和轉義。 我怎樣才能避免這種情況?
嘗試這個
Kernel.`('echo "#{a}"')
逐字打印
#{a}
有趣的事實, `
實際上是Kernel
上的一個方法,您可以像調用任何其他方法一樣調用它。 因此傳遞一個單引號字符串作為參數。
在非轉義上下文中形成字符串並將其插入到反引號中:
s = %{echo "he\ny"}
puts `#{s}`
如果您需要處理轉義字符,則可以改用 %q :
system(%q{echo '#&%$][/\'})
#=> #&%$][/\
如果你想要字符串插值,你可以使用 %Q :
a = 20
system(%Q{echo '#{a}&%$][/\'})
#=> 20&%$][/
這是一個關於它的線程。 請注意,您可以在%q
和%Q
之后使用任何分隔符:選擇一個不在您的字符串中的分隔符!
我在這里使用system
而不是%x{}
或 ticks。 它們不是等價的,但我只是想顯示字符串定義,而不是使該行變得比現在更復雜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.