而在bash循环

我在bash中的while循环有一个问题。 我从文件中读取文件名,然后我想处理它们。 问题是,while循环停在最后一行,而没有处理它,这迫使我们在该文件上有一个空的最后一行(有些往往会被删除)。 有没有办法循环包括最后一行?

#datafile filename1 filename2 

 while read project_name do echo $project_name done < "datafile" 

这将打印出filename1但不是2。

BRG Anders Olme

问题是你在文件末尾没有换行符。 按照这个问题,你应该在读执行之后评估退出代码。 在链接中更好的解释。

 #!/bin/bash DONE=false until $DONE ;do read LINE || DONE=true echo $LINE done < "datafile" 

你应该用for / cat来试试看看你是否看到相同的行为:

 for project_name in $(cat datafile) do echo $project_name done 

但是我可以想象,为什么你原来的例子不能工作。