2013-10-14 1 views
10

Я пытаюсь избежать пробелов в пути Linux. Тем не менее, всякий раз, когда я пытаюсь избежать моей обратной косой черты, я получаю двойную косую черту.Исключение пробелов в пути linux с Ruby gsub

Пример пути:

/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 

ответ

29

Stefan is правильно; Я просто хочу отметить, что если у вас есть, чтобы избежать строки для оболочки использовать вы должны проверить 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 
+1

Или 'shellwords.escape ('/ mnt/drive/site/usa/1201 East ...')'. – hagello

8

Это inspect значения строки, "версию для печати ул, окруженную кавычками, со специальными символами, экранированными":

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

Просто напечатать строку:

puts quoted 

Выход:

path/to/file\ with\ spaces 
+0

Просто для кого рассматривает возможность использовать это решение: Shellwords также экранирует специальные символы, такие как '$ {} []' и т.д. – Wukerplank

Смежные вопросы