Categories: Linuxshell

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

 

Felipe Braz

Recent Posts

online ansible vault tool

A criação e validação de credenciais seguras em ansible sempre gera um pouco de dor…

2 anos ago

Magento e o mistério do servidor somente-leitura

Dia desses, um dos meus servidores entrou com o sistema de arquivos / em modo…

5 anos ago

Localização de arquivos .desktop no ubuntu

O launcher do ubuntu não fornece muitas opções me relação aos icones, muitas vezes apps…

5 anos ago

Ordenar array por tamanho em php

Três meios diferentes para a mesma finalidade: Usando funções nativas do PHP (recomendado): array_multisort(array_map('strlen', $array),…

5 anos ago

Adicionar suporte a rc.local no ubuntu 16.04 ou superior

Embora um script muito útil para tarefas de inicialização de um servidor, essa funcionalidade se…

5 anos ago

API json registro.br gratuita

Pra que precisa de uma API pra consultar domínios .br é só utilizar a pagina…

5 anos ago