使用Ruby gsub在linux路径名中转义空格
我试图逃离Linux路径中的空间。然而,每当我试图摆脱我的反斜杠,我最终以一个双斜杠结束 示例路径:使用Ruby gsub在linux路径名中转义空格,ruby,gsub,Ruby,Gsub,我试图逃离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/driv
/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
这是字符串的值,“str的可打印版本,由引号包围,并转义特殊字符”:
只需打印字符串:
puts quoted
输出:
path/to/file\ with\ spaces
斯特凡是对的;我只想指出,如果您必须为shell使用转义字符串,您应该检查:
或
shellwords.escape('/mnt/drive/site/usa/1201 East…')
。仅适用于考虑使用此解决方案的任何人:shellwords还可以转义特殊字符,如${}[]
等。
path/to/file\ with\ spaces
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