我怎样才能确定“while read line”的最后一行?
例如:
while read line; do
if [ "$line" = "last line" ]; then
echo "this line is the last one ($line);"
else
echo "$line"
fi
done <<< "$lines"
答案1
如果您输入的内容不可预测(例如手动输入),则会出现问题。除非您可以预测未来,否则您无法轻易(即通过构造while read line
)知道下一个内容是什么。此外,由于输入停止时循环也会停止,因此您必须存储某一行并对其采取行动后它的“循环”是这样的。在此之前你无法知道它是否是最后一个。如果输入是固定字符串或文件,那么它更多的是理论考虑而不是实际考虑。
做你想做的事情的原型:
unset lastline
while read line; do
if ! [ -z "$lastline" ]; then
echo "$lastline"
fi
lastline=$line
done <<< "$lines"
echo "This is the last one: $lastline"
unset lastline
只是为了“保护你”,如果你在终端等中多次运行相同的脚本,因为$lastline
一开始可能就不是空的。echo
如果这可能是一个问题,你也可以在最后一次之后清除它。! [ -z "$lastline" ]
$lastline
如果变量非空(从技术上讲,如果字符串的长度不为零),则返回 true 。看看man test
你是否不习惯这些测试。
(虽然我的直觉想问你你真正想做的是什么:-) 。