ton*_*nix 6 shell terminal grep exit-code
我有这个命令:
grep -E '^nothing' List.txt | echo $?
Run Code Online (Sandbox Code Playgroud)
这里 grep 不匹配任何东西,我只是输出它的退出代码。根据 grep 的文档:
通常,如果选择了一行,退出状态为 0,如果没有选择任何行,则退出状态为 1,如果发生错误,则退出状态为 2。但是,如果使用 -q 或 --quiet 或 --silent 选项并选择了一行,即使发生错误,退出状态也是 0。其他 grep 实现可能会在出错时以大于 2 的状态退出。
但:
prompt:user$ grep -E '^nothing' List.txt | echo $?
0
prompt:user$
Run Code Online (Sandbox Code Playgroud)
但是为什么即使匹配不存在,我也会得到 0 作为输出,我不应该得到预期的 1 退出代码吗?
这就是问题:
grep -E '^nothing' List.txt | echo $?
Run Code Online (Sandbox Code Playgroud)
通过使用 single,|您发送的输出将始终打印grep上echo一个命令的退出状态,并且无论是否找到模式,该输出都将始终为 0。
您可以使用grep -q:
grep -qE '^nothing' List.txt
Run Code Online (Sandbox Code Playgroud)
按照man grep:
-q, --quiet, --silent
Quiet mode: suppress normal output. grep will only search a file until a match
has been found, making searches potentially less expensive.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10993 次 |
| 最近记录: |