grep 출력 재사용

grep 출력 재사용

내 프로젝트에서 보류 중인 TODO를 인쇄하는 스크립트를 작성 중인데 변수 중 하나를 재사용하는 데 문제가 있습니다. 더 명확하게 하기 위해 제가 작성한 코드는 다음과 같습니다.

#!/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

이 경우 스크립트는 값이 무엇이든 관계없이 항상 절의 then일부를 반복합니다 . 그러나 내가 다음 과 같이 정의한다면ifnumber_of_todosnumber_of_todos

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

그러면 코드가 제대로 작동할 것입니다. grep코드 중복을 피하기 위해 출력을 재사용하고 싶습니다 . 내가 무엇을 놓치고 있나요?

먼저, 감사합니다.

답변1

단순화됨: grep아무것도 발견되지 않으면 0이 아닌 값으로 종료하십시오(또는 TODOS쉘에 아무것도 포함되어 있는지 테스트 할 수 있습니다 -n "$TODOS").

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

답변2

배열을 사용하고 싶습니다.

#!/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

관련 정보