我有 GNU grep 3.3-1(Debian Buster 中的当前版本)。
来自man grep
:
退出状态
通常,如果选择了一行,退出状态为 0,如果没有选择任何行,则退出状态为 1,如果发生错误,则退出状态为 2。但是,如果使用
-q
or--quiet
或--silent
选择了一行,即使发生错误,退出状态也是 0。
这与POSIX一致。(-L
此处未指定。)
最新版本的完整文档和最新提交中的文档没有关于-L
( --files-without-match
) 的更多详细信息。
grep -L x <<<x
(in bash
) 以代码 1 退出。我不确定这是否与文档一致(这里选择的行到底是什么?),但至少这是可以解释的:没有输入文件符合必须没有x
.
grep -Lq x <<<x
并且grep -L x <<<x >/dev/null
都以代码 0 退出。好吧,-q
稍微好理解一点,但是为什么 stdout 重定向会影响退出代码?因此,要在抑制输出的同时获得原始退出代码行为,(set -o pipefail; /bin/grep -L x <<<x | cat >/dev/null)
需要进行类似的 hack 。这是为什么?
由于 GNU grep 被如此广泛地使用,我不确定这是一个错误grep
:我更有可能错过一些东西。或者也许退出代码-L
只是不依赖的东西?即使您可以使用像这样的测试运行和源代码来了解当前版本的行为,但这种行为将来可能会发生变化,因为它与当前文档不一致。你怎么认为?
(顺便说一句,除了非 2 退出代码(in )和像(in )这样的边缘情况外,最新提交中的测试似乎没有进行测试。)-L
in-eq-out-infloop
-f /dev/null
skip-read
归档时间: |
|
查看次数: |
122 次 |
最近记录: |