2013-10-14 11 views
10

Próbuję uciec z przestrzeni na ścieżce Linuksa. Jednak za każdym razem, gdy próbuję uciec od mojego ukośnika, kończę podwójną kreską.Miejsca ucieczki w ścieżce linuxa z Ruby gsub

Przykład ścieżka:

/mnt/drive/site/usa/1201 East/1201 East Invoice.pdf 

Tak, że mogę to wykorzystać w Linuksie Chcę uciec jak:

/mnt/drive/site/usa/1201\ East/1201\ East\ Invoice.pdf 

Więc próbuję to:

backup_item.gsub("\s", "\\\s") 

Ale otrzymuję nieoczekiwany wynik

/mnt/drive/site/usa/1201\\ East/1201\\ East\\ Invoice.pdf 

Odpowiedz

29

Stefan jest dobrze; Chcę tylko zwrócić uwagę, że jeśli trzeba uciec ciągi Shell użyciu należy sprawdzić 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

Lub 'shellwords.escape ('/ mnt/drive/site/usa/1201 East ...')'. – hagello

8

To inspect wartość ciągu, "w wersji do druku Str, otoczone cudzysłowie, ze znakami specjalnymi uciekł":

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

prostu wydrukować ciąg:

puts quoted 

Wyjście:

path/to/file\ with\ spaces 
+0

Tylko ktoś rozważa użycie tego rozwiązania: Shellwords ucieka również znaki specjalne jak '$ {} []' etc – Wukerplank