2017-01-28 4 views
1

ルビでは、バッククォートはシステムコールですが、補間です。私はこのRubyで非補間bashエスケープを取得するにはどうすればよいですか?

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

を行うことができ、これはいいです。しかし、私は時々私のコードで\をしたいので、それも面倒ですが、それは補間とエスケープであるので、私は``\\を必要としています。どうすればこれを避けることができますか?

答えて

0

nonescapingコンテキスト内の文字列を形成し、バッククォートにそれを補間:これはそのまま

#{a} 

楽しい事実を印刷し

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

`が実際に試してみてください

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

Kernelのメソッドと同様に呼び出すことができます他の方法。そして引数として単一引用符文字列を渡します。

+0

アハハ。このメソッド呼び出しはとても奇妙で不均衡に見えます。私はそれが働いたことを知らなかった。 –

0

あなたはエスケープ文字を両立する必要がある場合は、代わりに%qを使用することができます

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

あなたは、文字列の補間をしたい場合は、%Qを使用することができます。

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

はここについてthreadですそれ。 %q%Qの後に任意の区切り記号を使用できます。文字列に含まれていない区切り記号を選択してください。

ここでは%x{}またはダニの代わりにsystemを使用しました。それらは同等ではありませんが、私は文字列の定義を、それよりもさらに複雑にすることなく表示したかっただけです。

+0

'system'はバックティックとは異なります。すべての出力をキャプチャして文字列として返すのではなく、標準出力にペイントします。 – akuhn

+0

私はそれ以上線を複雑にしたくなかった。あなたは正しいですが、私はメモを追加します –

関連する問題