Reutilizando a saída do grep

1

Estou escrevendo um script para imprimir os TODOs pendentes em um projeto, mas estou com problemas para reutilizar uma das variáveis. Para deixar as coisas mais claras, aqui está o código que eu escrevi:

#!/usr/bin/env bash
todos="$(grep "TODO:" ./src -R)"
number_of_todos="$(echo "$todos" | wc -l)"

if [[ $number_of_todos -gt 0 ]];
then
    echo "List of TODOS:"
    echo $todos
else
    echo "There are no pending TODOs."
fi

Nesse caso, o script sempre passa pela parte then da cláusula if , independentemente do valor de number_of_todos . Mas, se eu definir number_of_todos como

number_of_todos="$(echo "$todos" | wc -l)"

o código funciona corretamente. Quero reutilizar a saída grep para não repetir o código. O que estou perdendo?

Obrigado em avançado.

    
por tulians 18.01.2017 / 19:00

2 respostas

3

Simplifique: grep sai não-zero ao não encontrar nada (ou você pode verificar se TODOS contém alguma coisa dentro do shell por meio de um teste -n "$TODOS" ).

#!/bin/sh
TODOS=$(grep -R 'TODO:' ./src)
if [ $? -eq 0 ]; then
    echo not ok
    echo $TODOS
else
    echo ok
fi
    
por 18.01.2017 / 19:29
0

Gostaria apenas de usar uma matriz:

#!/usr/bin/env bash
todos=( "$(grep TODO: ./src -R)" )

if [[ ${#todos[@]} -gt 0 ]];
then
    echo "List of TODOS:"
    echo "${todos[@]}"
else
    echo "There are no pending TODOs."
fi
    
por 18.01.2017 / 19:28