Linux grep返回代码

时间:2017-02-15 13:57:49

标签: linux bash shell grep

我很难理解以下为什么返回1的代码。

echo 'Total' | grep -c No
0

“总计”中不存在“否”。但随后查看其返回码我将其视为1.

echo $?
1

为什么返回代码显示为1?有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:25)

根据man grep页面,-c标记用于

  

-c, - count                 抑制正常输出;而是为每个输入文件打印匹配行的计数。

所以你看到的是匹配的数量,不要与grep匹配的退出代码混淆。代码1是因为输入没有匹配行。

看看另一个案例,

echo 'No' | grep -c No
1

echo $?
0

另请阅读EXIT CODES页面上的man grep

  

退出状态          通常,如果选择了一行,则退出状态为0;如果未选择行,则退出状态为1;如果发生错误,则退出状态为2。

答案 1 :(得分:15)

退出代码为1,因为grep没有匹配。

  

退出状态         如果找到选定行,则退出状态为0,如果未找到,则退出状态为1。         如果发生错误,则退出状态为2.(注意:POSIX错误处理         代码应该检查' 2'或者更大。)

输出为零,因为' Total'是零。这是由于-c选项:

  

-c, - count                 抑制正常输出;而是打印匹配行的计数                 对于每个输入文件。使用-v, - inverse-match选项(参见                 在下面),计算不匹配的行。 (-c由POSIX指定。)

如果您想强制退出代码为0,则可以添加||对你的命令忠诚: echo' Total' | grep -c否||真