No GNU / Linux, nada, exceto /
e
(ASCII NUL), é permitido como um caractere constituinte válido para o nome do arquivo. Portanto, espaço, tabulação e até nova linha são caracteres constituintes válidos de nome de arquivo. Quando você tem qualquer nome de arquivo, você precisa usar qualquer mecanismo de escape trivial para obter o significado literal do (s) caractere (s). \
Por exemplo, para um nome de arquivo como:
foo bar spam.txt
você pode usar aspas simples, aspas duplas ou foo $bar spam.txt
para escapar dos espaços:
'foo bar spam.txt'
"foo bar spam.txt"
foo\ bar\ spam.txt
aspas simples são recomendadas com um nome de arquivo como $bar
se você usar aspas duplas, o shell levará $
como uma expansão variável, o mesmo vale para \
sem escape enquanto estiver usando IFS
.
Sem escape, o shell executará a divisão de palavras com base nos valores da variável de ambiente *
(espaço, guia, nova linha por padrão) e expansão do nome de caminho na string (se houver ?
, []
, $file
no nome do arquivo).
No caso de uma variável, você precisa duplicar a expansão da variável:
file='foo bar spam.txt'
echo "$file"
O %code% simples cairá novamente na divisão de palavras (e na expansão do nome do caminho).