【问题标题】:Escape spaces in a linux pathname with Ruby gsub使用 Ruby gsub 转义 linux 路径名中的空格
【发布时间】: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

【问题讨论】:

    标签: ruby gsub


    【解决方案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 也会转义特殊字符,例如 ${}[] 等。
    猜你喜欢
    • 1970-01-01
    • 2017-05-22
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多