使用Ruby gsub转义linux路径名中的空格

我试图逃避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 

斯蒂芬是对的; 我只想指出,如果你必须为shell使用转义字符串,你应该检查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 

这是字符串的inspect值, “str的可打印版本,被引号括起,特殊字符被转义”

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

只需打印字符串:

 puts quoted 

输出:

 path/to/file\ with\ spaces