bash 中的 while 循环

bash 中的 while 循环

我在 bash 中使用 while 循环时遇到了问题。我从一个文件中读取文件名,然后想对其进行处理。问题是 while 循环在最后一行停止,没有对其进行处理,这迫使我们在该文件的最后一行留空(有时会删除最后一行)。有没有办法循环并包含最后一行?

#datafile
filename1
filename2

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

这将打印出文件名 1,但不会打印出文件名 2。

BRG 安德斯·奥尔默

答案1

问题是文件末尾没有换行符。根据这个问题您应该在读取执行后评估退出代码。链接中有更好的解释。

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

答案2

您应该尝试使用 for/cat 来查看是否看到相同的行为:

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

但是我想不出为什么你的原始示例不起作用。

相关内容