Preservando nova linha nos resultados da pesquisa find / grep

3

Eu estou procurando recursivamente pela ocorrência de scripts php sendo chamados de outros arquivos usando o seguinte script.

find . -exec grep -Hn $1 {} \; | grep -v ^Binary;

Funciona muito bem! Agora, preciso dos resultados retornados para determinar a ação a ser tomada a seguir.

r=$(find . -exec grep -Hn $str {} \; | grep -v ^Binary;)

 if [ -z "$r" ];
    then
          Do this
    else
          Do something else
    fi

PROBLEMA: Por si só, o script de localização retorna os resultados, cada um em uma nova linha.

./path/to/file.php
./path/to/another_file.php
./path/to/third_file.php

No entanto, ao atribuir a saída à variável $ r, o caractere de nova linha não é preservado e os resultados são impressos em uma linha, dificultando a leitura.

./path/to/file.php ./path/to/file.php ./path/to/third_file.php

Como preservo o caractere de nova linha ao atribuir a saída a uma variável?

    
por pfmasse60 10.10.2014 / 01:22

1 resposta

6

Você não mostra o que faz com $r , mas aposto que é

echo $r

Você precisa colocar a variável entre aspas duplas para preservar as novas linhas

echo "$r"

Sem aspas, a variável está sujeita a divisão de palavras , em que qualquer sequência de espaços em branco 1 (incluindo novas linhas) são substituídos por um único espaço 1

1 : por padrão, depende do conteúdo de $IFS (padrão: espaço, tabulação, nova linha)

    
por 10.10.2014 / 01:31