Escape пробелы в пути linux с 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/drive/site/usa/1201\\ East/1201\\ East\\ Invoice.pdf
Ответы
Ответ 1
Стефан прав; Я просто хочу указать, что если вам нужно избегать строк для использования оболочки, вы должны проверить 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 just
puts "/mnt/drive/site/usa/1201 East/1201 East Invoice.pdf".shellescape
# prints /mnt/drive/site/usa/1201\ East/1201\ East\ Invoice.pdf
Ответ 2
Это строка inspect
значение, "печатная версия str, окруженная кавычками, со специальными символами, экранированными":
quoted = "path/to/file with spaces".gsub(/ /, '\ ')
=> "path/to/file\\ with\\ spaces"
Просто напечатайте строку:
puts quoted
Вывод:
path/to/file\ with\ spaces