所有,
我正在检查最后一行文件中的错误信息,如果存在“错误”,我希望得到“是”结果。我的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"
答案 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