#14660·coreutils

tail: 过时的 `+0` 语法在跳过计数时溢出 — 在发行版中不打印任何内容,在溢出检查时中止

作者: leeewee创建于 2026年9月18日更新于 2026年9月18日

`tail` 的过时操作符语法(`tail +N`、`tail +Nc`)通过与现代的 `-n +N`/`-c +N` 标志不同的路径进行解析,且该路径永远不会对零计数进行正则化。因此,`+0` 会返回 `Signum::Positive(0)`,而 `-n +0` 会返回 `Signum::PlusZero`,因此 `unbounded_tail` 会从 `PlusZero | Positive(1)` 臂转移到 `Positive(count)` 臂,并在 `u64` 中计算 `*count - 1`。在 **默认版本构建** 中,该下溢会包装为 `u64::MAX`,`tail` 会跳过每一行,该命令将静默地不输出任何内容并退出 0 - GNU 会输出整个输入。在 `-C overflow-checks=on` 选项下,同一表达式会导致崩溃,并显示 `attempt to subtract with overflow` 的错误信息。

内容来源: uutils/coreutils