ルビでは、バッククォートはシステムコールですが、補間です。私はこのRubyで非補間bashエスケープを取得するにはどうすればよいですか?
a = 20.sqrt
`cat #{a}`
を行うことができ、これはいいです。しかし、私は時々私のコードで\
をしたいので、それも面倒ですが、それは補間とエスケープであるので、私は``
内\\
を必要としています。どうすればこれを避けることができますか?
ルビでは、バッククォートはシステムコールですが、補間です。私はこのRubyで非補間bashエスケープを取得するにはどうすればよいですか?
a = 20.sqrt
`cat #{a}`
を行うことができ、これはいいです。しかし、私は時々私のコードで\
をしたいので、それも面倒ですが、それは補間とエスケープであるので、私は``
内\\
を必要としています。どうすればこれを避けることができますか?
nonescapingコンテキスト内の文字列を形成し、バッククォートにそれを補間:これはそのまま
#{a}
楽しい事実を印刷し
がKernel.`('echo "#{a}"')
、`
が実際に試してみてください
s = %{echo "he\ny"}
puts `#{s}`
Kernel
のメソッドと同様に呼び出すことができます他の方法。そして引数として単一引用符文字列を渡します。
あなたはエスケープ文字を両立する必要がある場合は、代わりに%qを使用することができます
system(%q{echo '#&%$][/\'})
#=> #&%$][/\
あなたは、文字列の補間をしたい場合は、%Qを使用することができます。
a = 20
system(%Q{echo '#{a}&%$][/\'})
#=> 20&%$][/
はここについてthreadですそれ。 %q
と%Q
の後に任意の区切り記号を使用できます。文字列に含まれていない区切り記号を選択してください。
ここでは%x{}
またはダニの代わりにsystem
を使用しました。それらは同等ではありませんが、私は文字列の定義を、それよりもさらに複雑にすることなく表示したかっただけです。
'system'はバックティックとは異なります。すべての出力をキャプチャして文字列として返すのではなく、標準出力にペイントします。 – akuhn
私はそれ以上線を複雑にしたくなかった。あなたは正しいですが、私はメモを追加します –
アハハ。このメソッド呼び出しはとても奇妙で不均衡に見えます。私はそれが働いたことを知らなかった。 –