Quando efetuamos um for em shellscript, por padrão ele considera como delimitador espaços, quebras de linha ou tabulações, isso gera uma dor de cabeça quando temos que tratar nomes e arquivos ou diretórios com espaços.
Para melhor compreensão, abaixo temos um diretório com três arquivos:
felipebraz@localhost:~/teste$ ls -l total 0 -rw-rw-r-- 1 felipebraz felipebraz 0 Abr 19 15:41 1.html -rw-rw-r-- 1 felipebraz felipebraz 0 Abr 19 15:41 teste2.html -rw-rw-r-- 1 felipebraz felipebraz 0 Abr 19 15:41 teste de arquivo.html
Ao efetuarmos um for, ele vai quebrar o último arquivo nos espaços, retornando 5 registros ao invés de 3.
felipebraz@localhost:~/teste$ for i in `ls`; do echo $i; done 1.html teste2.html teste de arquivo.html
Para solucionar essa questão, podemos utilizar a variável IFS
para definir qual caractere deve ser usado como delimitador.
felipebraz@localhost:~/teste$ IFS="\n" felipebraz@localhost:~/teste$ for i in `ls`; do echo $i; done 1.html teste2.html teste de arquivo.html