我挣扎明白为什么在返回的1Linux的grep的返回码
echo 'Total' | grep -c No
0
所以“否”不存在“总”码以下。但随后查找其返回码,我将其视为1.
echo $?
1
为什么返回码显示为1?有没有办法解决这个问题?
我挣扎明白为什么在返回的1Linux的grep的返回码
echo 'Total' | grep -c No
0
所以“否”不存在“总”码以下。但随后查找其返回码,我将其视为1.
echo $?
1
为什么返回码显示为1?有没有办法解决这个问题?
根据man grep
页,-c
标志是用于
-c,--count 禁止正常输出;而是为每个输入文件打印一个匹配行数。
所以你看到的是匹配计数,不要与grep
匹配的退出码混淆。代码1
是因为没有与输入匹配的行。
看一看另一种情况下,
echo 'No' | grep -c No
1
echo $?
0
而且对man grep
页EXIT CODES
阅读,
退出状态 通常情况下,退出状态为0如果选择了线,1如果没有行被选中,2如果发生错误。
退出码为1,因为没有任何内容与grep匹配。
退出状态 退出状态是0,如果选择的行被找到,并且如果1未找到。 如果发生错误,退出状态为2(注:POSIX错误处理代码 应检查是否有“2”或更大)。
输出为零,因为“共有”的计数为零。这由于-c选项:
-c,--count 抑制正常输出;而是为每个输入文件打印匹配行数 。使用-v,--invert-match选项(请参见下面的 ),对不匹配的行进行计数。 (-c由POSIX指定)。
如果您想强制退出代码0,你可以追加||对您的命令为真: echo'Total'| grep -c否|| true
只有匹配某个字符串时'grep'才会返回零。这个规则也适用于'grep -c'。 –