使用 Ruby gsub 转义 linux 路径名中的空格
Posted
技术标签:
【中文标题】使用 Ruby gsub 转义 linux 路径名中的空格【英文标题】:Escape spaces in a linux pathname with Ruby gsub 【发布时间】:2013-10-21 17:52:33 【问题描述】:我正在尝试转义 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
【问题讨论】:
【参考方案1】:Stefan 是对的;我只想指出,如果您必须转义字符串以供 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
【讨论】:
或shellwords.escape('/mnt/drive/site/usa/1201 East…')
。【参考方案2】:
即字符串的inspect
值,“str的可打印版本,用引号括起来,特殊字符转义”:
quoted = "path/to/file with spaces".gsub(/ /, '\ ')
=> "path/to/file\\ with\\ spaces"
只打印字符串:
puts quoted
输出:
path/to/file\ with\ spaces
【讨论】:
仅供考虑使用此解决方案的任何人使用:Shellwords 也会转义特殊字符,例如$[]
等。以上是关于使用 Ruby gsub 转义 linux 路径名中的空格的主要内容,如果未能解决你的问题,请参考以下文章