2012-04-20 15 views
0

如果我做的:如何在沒有「測試」的情況下創建if或while循環並使用「not」運算符?

if grep someexpression somefile >/dev/null; then 
    ... 
fi 

事情做工精細。

做一個 「不」,我知道我可以做到這一點(使用[],這是測試命令):

if [ '!' somecondition ] ; then 
    ... 
fi 

簡單的解決方法:

grep someexpression somefile >/dev/null 
if [ '!' $? ]; then 
    ... 
fi 

但上面的解決方法將不會使用while循環,所以我需要編寫一個函數,而這很煩人。我該如何做一個不符合上述grep事情的正確方法?

回答

3

嘗試:

if ! grep someexpression somefile >/dev/null; then 
    ... 
fi 

注意!後的空間是強制性的,否則會(嘗試)援引歷史擴展。

+0

有趣。上次我遇到這個問題時,我完全是這樣想的,它說「沒有這樣的事件」。但你的例子工作正常。 – Peter 2012-04-20 11:29:42

+1

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html - 它甚至是文檔中的一個例子。 (以ksh工作,但我不確定它是否是有效的POSIX shell語法。) – Mat 2012-04-20 11:38:41

+1

您已啓用歷史擴展。這不應該是一個腳本中的問題。我交互禁用它,因爲它會導致更多的問題,而不是它的價值。 @Mat它是POSIX。它並沒有永遠存在,但我懷疑這種炮彈的嚴重使用者仍然處於這種狀態(方式是在爆炸前/爆破彈之前)。 – ormaaj 2012-04-20 11:53:05

相關問題