【发布时间】:2021-10-04 15:56:49
【问题描述】:
这主要是here提出的一个好奇问题。
从我阅读的 GNU sed 4.8 的手册页
--posix
disable all GNU extensions.
所以我知道,如果像下面这样的代码有效,则意味着 POSIX 允许 -i without 参数:
sed --posix -i -n '1,25p' *.txt
另一方面,相同的代码(有或没有--posix)不适用于 MacOS 的 BSD sed,因为该版本要求 -i 后跟一个参数。
我只能看到两种相互排斥的可能性:
- GNU sed 的
--posix选项允许的不仅仅是 POSIX,这意味着它存在错误并需要错误报告 - BSD sed 不符合 POSIX。
真相是什么?
【问题讨论】:
-
pubs.opengroup.org/onlinepubs/9699919799/utilities/… 看起来
-e、-f和-n是 POSIX 指定的唯一标志。其他标志的行为取决于实现。 (虽然严格的阅读意味着像-i这样的参数应该被视为一个文件名,并且一个符合要求的实现应该保释像-i: file not found这样的错误) -
GNU sed's --posix option allows more than POSIXPOSIX 未指定选项--posix,因此如果您希望--posix在非posix 标志上出错,则执行sed --posix应该总是出错。这不是bug,--posix是排除非posix sed 命令,如T或W或1~2p,而不是标志。