2014-01-23 73 views
3

所有,-bash:[:@:二進制運算符預期

我檢查在最後一行文件中的錯誤信息,我想有一個「是」的結果,如果有一個「錯誤」 。我的shell腳本如下圖所示:

-bash: [: @: binary operator expected 

在最後一行的錯誤信息是象下面這樣::

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

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

然後我在標題中得到了錯誤像上面我認爲這是因爲[@]格式內容導致此錯誤的錯誤消息。但我不知道如何解決它。有沒有人知道如何處理這個[@]問題。非常感謝

@csiu,非常感謝您的快速回復。

這裏的技巧是使用雙「[」,如下:

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

'[]'是做一些比較,你只是給一塊文本,所以對於bash而言[@]'是不能解釋的。 – fedorqui

+0

如何使用雙「[」和「]」? '[[$(tail -1 error.log | grep -E「Error」)]] && echo「yes」' – csiu

+0

@fedorqui,我認爲grep -E是用於比較。 – zhihong

回答

4

此外,以@ csiu的回答,不需要test命令的。您可以根據的grep的退出狀態操作:

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

使用-q沉默從grep的輸出。它也更高效,因爲一旦找到模式,grep就會立即退出。


因爲我們只有一個輸入線,我們甚至不需要的grep:

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

+1這是更好的答案。 – chepner

+0

事後看來,效率並不相關,因爲我們只有一行輸入 –

+0

@ glenn,很好,這是我最初的想法,可以隱藏grep的輸出。但在這裏不知道「-q」選項。非常感謝〜 – zhihong