2012-04-20 75 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

相关问题