A resposta do @Olorins é a resposta correta para essa pergunta, mas quero adicionar mais algumas informações por que ela não funciona:
Você pode usar um destes:
rm "dir with spaces"
rm dir\ with\ spaces
dir="dir with spaces"; rm "$dir"
Mas isso não funciona:
dir="dir\ with\ spaces";
rm "$dir" # the backslash will be taken literally inside quotes
rm $dir # this should work, shouldn't it? Please read below.
A última opção não foi intuitiva para mim no começo. Mas o bash expande o conteúdo da variável, adicionando algumas citações antes da execução .
Você pode usar set -x
para ver o que realmente é executado:
( var="a\ b"; set -x; echo $var; )
+ echo 'a\' b
a\ b
Enquanto a saída parece boa, o espaço ainda está sem escape porque o \
está entre aspas simples.