você está aqui: Home  → Arquivo de Mensagens Curso Gratuito sobre Expressões Regulares, com o Prof.  Julio Neves

Comando "for" com nomes de arquivos contendo espaços

Colaboração: Clovis Reis

Data de Publicação: 15 de fevereiro de 2013

Por diversas vezes encontrei problemas ao utilizar um comando "for" onde os argumentos possuiam espaços em branco. Por exemplo:

bash$ for i in `ls *.jpg`; do echo $i; done;

Neste caso, seria de se esperar o seguinte resultado:

foto1.jpg
foto2.jpg
foto3.jpg

Porém, caso o comando "for" encontre o arquivo chamado "foto das ferias.jpg", obteremos o seguinte resultado:

foto1.jpg
foto2.jpg
foto3.jpg
foto
das
ferias.jpg

Isso ocorre porque o comando "for" usa como delimitador de campo o espaço em branco. Para solucionar o problema, basta modificar o conteúdo da variável IFS algo mais conveniente, tal como um "\n"

A variável IFS ou Internal Field Separator é usada para separar argumentos dentro de uma linha quando utilizamos um comando builtin. Seu valor default é um espaço em branco.

Assim, antes de usar o comando "for" ou qualquer outro que se "atrapalhe" com os espaços em branco, basta setar IFS com o valor adequado:

bash$ IFS=$ \n

e usar o comando normalmente



Veja a relação completa dos artigos de Clovis Reis