내 프로젝트에서 보류 중인 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
일부를 반복합니다 . 그러나 내가 다음 과 같이 정의한다면if
number_of_todos
number_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