13

Linux パスのスペースをエスケープしようとしています。ただし、バックスラッシュをエスケープしようとすると、ダブルスラッシュになってしまいます。

パスの例:

/mnt/drive/site/usa/1201 East/1201 East Invoice.pdf

これを Linux で使用できるように、次のようにエスケープします。

/mnt/drive/site/usa/1201\ East/1201\ East\ Invoice.pdf

だから私はこれを試しています:

backup_item.gsub("\s", "\\\s")

しかし、予期しない出力が得られます

/mnt/drive/site/usa/1201\\ East/1201\\ East\\ Invoice.pdf
4

2 に答える 2

37

ステファンは正しい。シェルを使用するために文字列をエスケープする必要がある場合は、次を確認する必要があることを指摘したいだけですShellwords::shellescape

require 'shellwords'

puts Shellwords.shellescape "/mnt/drive/site/usa/1201 East/1201 East Invoice.pdf"
# prints /mnt/drive/site/usa/1201\ East/1201\ East\ Invoice.pdf

# or

puts "/mnt/drive/site/usa/1201 East/1201 East Invoice.pdf".shellescape
# prints /mnt/drive/site/usa/1201\ East/1201\ East\ Invoice.pdf

# or (as reported by @hagello)
puts shellwords.escape "/mnt/drive/site/usa/1201 East/1201 East Invoice.pdf"
# prints /mnt/drive/site/usa/1201\ East/1201\ East\ Invoice.pdf
于 2013-10-14T08:20:13.240 に答える
12

それが文字列のinspect値、「特殊文字がエスケープされた、引用符で囲まれた印刷可能なバージョンの str」です。

quoted = "path/to/file with spaces".gsub(/ /, '\ ')
=> "path/to/file\\ with\\ spaces"

文字列を印刷するだけです:

puts quoted

出力:

path/to/file\ with\ spaces
于 2013-10-14T08:14:05.733 に答える