如果[$?-eq 0]对shell脚本意味着什么?

Oh *_*oon 37 bash shell

在我看到的shell脚本中有这一行:

grep -e ERROR ${LOG_DIR_PATH}/${LOG_NAME}  > /dev/null
if [ $? -eq 0 ] 
Run Code Online (Sandbox Code Playgroud)

Chr*_*rle 38

它检查的返回值($?)grep.在这种情况下,它将其与0(成功)进行比较.

通常当你看到这样的东西(检查grep的返回值)时,它会检查是否检测到特定的字符串.虽然重定向/dev/null不是必需的,但使用可以完成同样的事情-q.

  • `/ dev/null`是一种特殊的"黑洞"文件.写入时,数据将被丢弃.这是阻止程序将其输出打印到屏幕的经典方法. (5认同)

Wyz*_*a-- 36

$?是最近执行的命令的退出状态; 按惯例,0表示成功,其他任何表示失败.该行正在测试grep命令是否成功.

grep手册页指出:

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

所以在这种情况下,它会检查是否找到了任何ERROR行.