Erro ao utilizar o comando for com argumentos que tem espaço em branco

image_pdfimage_print

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.

Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!