bash的新手。我想要一个“while read line”循环从命令获取输入 - 在这种情况下,grep。我希望读取读取grep返回的每一行,并将其作为字符串插入“line”var。如果grep没有返回任何结果,我仍然希望它进入循环,所以我可以printf一些然后继续。它会起作用吗?这是代码段:
while read -r line: do
...(irrelevent)...
done<$(grep $id ${arrpre[$j]}.course)
$ {arrpre [$ j]}。course是文件的名称。 tnx的帮助!
答案 0 :(得分:1)
[我]在这种情况下,grep没有返回结果,我仍然希望它进入循环,所以我可以打印一些东西,然后继续。它会起作用吗?
没有。如果您将命令的输出(即grep
)输入while
循环,并且该命令根本不产生任何输出,则read
将看到结束 - 文件首次执行。 read
在遇到文件结束时返回失败代码,这将导致循环终止而不执行其正文。如果不是这种情况,那么在每种情况下都会有while
循环的额外迭代,无论是否有任何数据要读取。
但是你可以明确地记录循环体是否被执行,然后采取适当的行动。例如:
empty=1
while read -r line: do
empty=0
# ...
done < $(grep $id ${arrpre[$j]}.course)
if [ $empty -eq 1 ]; then
# ... stuff to do in the event of empty grep output
fi