簡體   English   中英

如何在 Ruby 中獲得非插值 bash 轉義?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM