-i 不带参数:是 GNU sed --posix 选项有问题还是 BSD sed 不符合 POSIX?
-i without argument: is GNU sed --posix option bugged or BSD sed is not POSIX-compliant?
这主要是一个好奇的问题 。
我阅读了 GNU sed 4.8 的手册页
--posix
disable all GNU extensions.
所以我明白如果像下面这样的代码有效,这意味着 -i
without argument is allowed by POSIX:
sed --posix -i -n '1,25p' *.txt
另一方面,相同的代码(带或不带 --posix
)不适用于 MacOS 的 BSD sed,因为该版本要求 -i
后跟一个参数。
我只能看到两种互斥的可能性:
- GNU sed 的
--posix
选项允许超过 POSIX,这意味着它有错误并需要错误报告
- BSD sed 不 POSIX 兼容。
真相是什么?
--posix
指的是sed语言本身,不是命令行界面:
GNU sed includes several extensions to POSIX sed. In order to simplify writing portable scripts, this option disables all the extensions that this manual documents, including additional commands.
POSIX 没有指定 -i
,所以没有它的实现仍然可以 POSIX-conforming。
这主要是一个好奇的问题
我阅读了 GNU sed 4.8 的手册页
--posix
disable all GNU extensions.
所以我明白如果像下面这样的代码有效,这意味着 -i
without argument is allowed by POSIX:
sed --posix -i -n '1,25p' *.txt
另一方面,相同的代码(带或不带 --posix
)不适用于 MacOS 的 BSD sed,因为该版本要求 -i
后跟一个参数。
我只能看到两种互斥的可能性:
- GNU sed 的
--posix
选项允许超过 POSIX,这意味着它有错误并需要错误报告 - BSD sed 不 POSIX 兼容。
真相是什么?
--posix
指的是sed语言本身,不是命令行界面:
GNU sed includes several extensions to POSIX sed. In order to simplify writing portable scripts, this option disables all the extensions that this manual documents, including additional commands.
POSIX 没有指定 -i
,所以没有它的实现仍然可以 POSIX-conforming。