bash:read命令会从空命令中恢复输入吗?

时间:2017-11-13 18:14:02

标签: bash input command

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的帮助!

1 个答案:

答案 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