ler a linha completa em um loop do for

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