我很难理解以下为什么返回1的代码。
echo 'Total' | grep -c No
0
“总计”中不存在“否”。但随后查看其返回码我将其视为1.
echo $?
1
为什么返回代码显示为1?有办法解决这个问题吗?
答案 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否||真