dif*_*ous 26 linux bash shell grep
我很难理解以下为什么返回1的代码.
echo 'Total' | grep -c No
0
Run Code Online (Sandbox Code Playgroud)
因此"总计"中不存在"否".但是后来查看它的返回码我认为它是1.
echo $?
1
Run Code Online (Sandbox Code Playgroud)
为什么返回代码显示为1?有办法解决这个问题吗?
Ini*_*ian 34
根据man grep页面,-c标志是为
-c, - count抑制正常输出; 而是为每个输入文件打印匹配行的计数.
所以你看到的是比赛的数量,不要与grep比赛的退出代码混淆.代码1是因为输入没有匹配的行.
看看另一个案例,
echo 'No' | grep -c No
1
echo $?
0
Run Code Online (Sandbox Code Playgroud)
另外要阅读EXIT CODES的man grep页面,
退出状态通常,如果选择了一行,则退出状态为0;如果未选择行,则退出状态为1;如果发生错误,则退出状态为2.
小智 18
退出代码为1,因为grep没有匹配任何内容.
退出状态如果找到选定的行,则退出状态为0,如果未找到,则退出状态为1.如果发生错误,则退出状态为2.(注意:POSIX错误处理代码应检查"2"或更大.)
输出为零,因为"总计"的计数为零.这是由于-c选项:
-c, - count抑制正常输出; 而是为每个输入文件打印匹配行的计数.使用-v, - inverse-match选项(见下文),计算不匹配的行.(-c由POSIX指定.)
如果你想强制退出代码为0,你可以只追加|| 对你的命令忠实:echo'Total'| grep -c否|| 真正
| 归档时间: |
|
| 查看次数: |
43830 次 |
| 最近记录: |