一尘不染

为什么unix读时不读最后一行?

linux

我的剧本

export IFS=":"

cat hello | while read a b c d; do
    echo $a,$b,$c,$d
done

我的档案 hello

1:1:1:1
2:2:2:2
3:3:3:3

我的输出

1,1,1,1
2,2,2,2

如果我3:3:3:3hello之后放一个空白行,则输出变为

1,1,1,1
2,2,2,2
3,3,3,3

任何人都知道如何解决此问题,所以不需要在末尾添加空白行hello


阅读 230

收藏
2020-06-03

共1个答案

一尘不染

发生的情况是,read输入未以换行符终止
时,命令将失败。由于文件末尾缺少换行符read,因此失败,因此将while跳过循环的最后一次迭代。

如果您不想/不能确保输入文件的末尾有换行符,可以将您的文件cat与进行分组,echo以使输入的 外观 以换行符终止,例如:

{ cat hello; echo; } | while read a b c d; do
    echo $a,$b,$c,$d
done

或像这样:

(cat hello; echo) | while read a b c d; do
    echo $a,$b,$c,$d
done
2020-06-03