重用 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的一部分if,无论 的值是什么number_of_todos。但是,如果我定义number_of_todos

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

那么代码就可以正常工作了。我想重用grep输出以免重复代码。我缺少什么?

先谢谢了。

答案1

简化:grep如果找不到任何内容,则退出非零(或者您可以TODOS通过测试检查 shell 中是否包含任何内容-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

相关内容