我正在编写一个脚本来打印项目中待处理的 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