grep返回代码的行为

时间:2016-05-10 13:02:01

标签: regex bash macos grep

我已经在这里和其他地方看到了许多问题的答案,这些问题说你可以通过回显变量和管道来grep来对变量进行grep搜索。但是,遵循这些示例的语法,对我来说并不适用。

以下代码失败,回显"发现"每次,无论我用grep搜索什么字符串。我做错了什么?

TEST='This is a test of the emergency broadcast system.'
echo $TEST | grep 'blah'
if [ $? -eq 0 ]
then
    echo 'not found'
else
    echo 'found'
fi

2 个答案:

答案 0 :(得分:8)

你的支票应该反过来。

来自man grep

EXIT STATUS
       The  exit  status is 0 if selected lines are found, and 1 if not found.
       If an error occurred the exit status is 2.  (Note: POSIX error handling
       code should check for '2' or greater.)

查看示例:

$ echo "hello" | grep h
hello
$ echo $?
0
$ echo "hello" | grep t
$ echo $?
1

但是,最好使用Bash tools

[[ $TEST =~ *blah* ]] && echo "found" || echo "not found"

答案 1 :(得分:1)

零意味着shell脚本中的 true 。您甚至可以简化它:

TEST='This is a test of the emergency broadcast system.'
if echo "$TEST" | grep 'blah'
then
    echo 'found'
else
    echo 'not found'
fi