You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中while循环为何无法读取最后一行输入?

Bash while循环丢失最后一行输入的解决办法

问题场景

用while read循环读取标准输入内容并输出时,最后一行总是没被处理:

测试脚本

#!/usr/bin/env bash

while read -r num; do
    echo $num
done

输入内容

4
1
2
9
8

实际输出

4
1
2
9
# Last input is missing :(

期望输出

4
1
2
9
8

问题根源

read命令默认以换行符作为行结束标记。如果输入的最后一行没有以换行符结尾,或者输入流在最后一行内容后直接终止,read会把这行内容存入变量,但返回非零状态码——while循环会因为这个非零状态直接退出,跳过最后一次输出操作。

修复方案

方案一:增强循环条件(推荐)

修改循环条件,让read失败时,只要变量非空就继续处理:

#!/usr/bin/env bash

while IFS= read -r num || [[ -n $num ]]; do
    echo "$num"
done
  • IFS=:避免读取的行首尾空格被自动截断
  • || [[ -n $num ]]:补充判断,确保最后一行内容即使没有换行符也能被输出

方案二:循环后补处理

在循环结束后,单独检查变量是否还有未输出的内容:

#!/usr/bin/env bash

while read -r num; do
    echo "$num"
done
[[ -n $num ]] && echo "$num"

内容的提问来源于stack exchange,提问作者getimad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:40:34