这主要是这里出现的一个好奇问题。
从 GNU sed 4.8 的手册页中,我读到了
--posix
disable all GNU extensions.
所以我明白,如果像下面的代码有效,这意味着 POSIX 允许不带参数-i
:
sed --posix -i -n '1,25p' *.txt
另一方面,相同的代码(带或不带--posix
)不适用于MacOS的BSD sed,因为该版本希望-i
后面跟一个参数。
我只能看到两种相互排斥的可能性:
- GNU sed 的
--posix
选项允许的不仅仅是 POSIX,这意味着它有错误并且需要错误报告 - BSD sed 不符合 POSIX 标准。
真相是什么?
--posix
指的是sed语言本身,而不是命令行界面:
GNU sed 包含 POSIX sed 的几个扩展。为了简化可移植脚本的编写,此选项禁用本手册记录的所有扩展,包括其他命令。
POSIX没有指定-i
,所以没有它的实现仍然可以符合POSIX。