-bash:[:@:二元运算符预期

时间:2014-01-23 15:54:04

标签: bash error-handling

所有,

我正在检查最后一行文件中的错误信息,如果存在“错误”,我希望得到“是”结果。我的shell脚本如下所示:

[ $(tail -1 error.log | grep -E "Error") ] && echo "yes"

然后我在标题中得到了如上所述的错误:

-bash: [: @: binary operator expected

最后一行中的错误消息如下所示:

[aaa,bbb,ccc, Error.ddd @ ]

我认为这是因为错误消息,[@]格式内容导致此错误。但我不知道如何解决它。有没有人知道如何处理这个[@]问题。非常感谢

@csiu,非常感谢您的快速回复。

这里的诀窍是使用双“[”如下:

 [[ $(tail -1 error.log | grep -E "Error") ]] && echo "yes"

2 个答案:

答案 0 :(得分:4)

因为我的评论有效,不妨将其发布在答案部分;)

使用double" [["

[[ $(tail -1 error.log | grep -E "Error") ]] && echo "yes"

相关帖子:

答案 1 :(得分:4)

除了@ csiu的答案之外,根本不需要test命令。您可以根据grep的退出状态进行操作:

tail -1 error.log | grep -qE "Error" && echo yes

使用-q使grep的输出静音。它也更有效,因为一旦找到模式,grep就会立即退出。


由于我们只有一行输入,我们甚至不需要grep:

[[ $(tail -1 error.log) == *Error* ]] && echo yes