我怎样才能确定“while read line”的最后一行?

我怎样才能确定“while read line”的最后一行?

我怎样才能确定“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你是否不习惯这些测试。

(虽然我的直觉想问你你真正想做的是什么:-) 。

相关内容