我在 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
但是我想不出为什么你的原始示例不起作用。