如何使用grep的返回状态值?

时间:2017-07-26 14:31:17

标签: linux bash variables grep tail

为什么我的命令没有返回" 0"?

grep 'Unable' check_error_output.txt && echo $? | tail -1

如果我删除了回音$?'并使用tail来获得最后一次出现的“无法”#39;在check_error_output.txt中,它正确返回。如果我移除尾部-1,或用&&amp ;;更换管道它按预期返回。

我错过了什么?

4 个答案:

答案 0 :(得分:1)

以下方式实现了您在不使用管道或子壳的情况下想要做的事情

grep -q 'Unable' check_error_output.txt && echo $?

-q标志代表安静/无声

从手册页:

  

安静;不要写任何标准输出。如果发现任何匹配,则立即退出零状态,即使检测到错误也是如此。也                 请参阅-s或--no-messages选项。 (-q由POSIX指定。)

这仍然不是故障安全的,因为没有这样的文件或目录"错误仍然会出现两种方式。

我建议采用以下方法,因为它会输出任何类型的返回值:

grep -q 'Unable' check_error_output.txt 2> /dev/null; echo $?

主要区别在于无论是失败还是成功,您仍将获得返回码,错误消息将被定向到/ dev / null。请注意我如何使用";"而不是"&&",使其回显任何类型的返回值。

答案 1 :(得分:0)

使用过程替代:

cat <(grep 'Unable' check_error_output.txt) <(echo $?) | tail -1

答案 2 :(得分:0)

检查if语句中任何命令的返回值的最简单方法是:if cmd; then。例如:

if grep -q 'Unable' check_error_output.txt; then ...

答案 3 :(得分:-1)

我通过在grep和$附近添加括号来解决这个问题?

(grep 'Unable' check_error_output.txt && echo $?) | tail -1