O comando ‘for’ do shell script tem problemas com argumentos que tem espaços, como no exemplo abaixo:
for i in `ls *.png`; do echo $i; done;
Quando os arquivos não possuem espaço em branco em seus nomes, o resultado visto é:
imagem1.png
imagem2.png
imagem3.png
Caso alguem tenha espaço em branco, como em ‘imagem de teste.png”, o resultado obtido será:
imagem1.png
imagem2.png
imagem3.png
imagem
de
teste.png
Este comportamento ocorre porque o ‘for’ usa delimitador de campo o espaço em branco. Para solucionar o problema, basta modificar o conteúdo da variável IFS, que por padrão é um espaço em branco.
A variável IFS ou Internal Field Separator é usada para separar argumentos dentro de uma linha quando utilizamos um comando builtin.
Deste modo, antes de usar o comando “for”, basta definir IFS com o valor desejado. Um exemplo possível é:?
IFS=$ \n
Após isto, poderá ser usado o comando ‘for’ normalmente.