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

zhi*_*ong 5 error-handling bash

全部,

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

[ $(tail -1 error.log | grep -E "Error") ] && echo "yes"
Run Code Online (Sandbox Code Playgroud)

然后我在标题中得到了类似上面的错误:

-bash: [: @: binary operator expected
Run Code Online (Sandbox Code Playgroud)

最后一行的错误信息如下:

[aaa,bbb,ccc, Error.ddd @ ]
Run Code Online (Sandbox Code Playgroud)

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

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

这里的技巧是使用双 "[" 如下:

 [[ $(tail -1 error.log | grep -E "Error") ]] && echo "yes"
Run Code Online (Sandbox Code Playgroud)

csi*_*siu 5

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

使用双“[[”

[[ $(tail -1 error.log | grep -E "Error") ]] && echo "yes"
Run Code Online (Sandbox Code Playgroud)

相关文章:


gle*_*man 4

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

tail -1 error.log | grep -qE "Error" && echo yes
Run Code Online (Sandbox Code Playgroud)

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


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

[[ $(tail -1 error.log) == *Error* ]] && echo yes
Run Code Online (Sandbox Code Playgroud)