Bash 如何创建不带“while”的if或while循环;测试“;并使用「;不是";操作人员
如果我这样做:Bash 如何创建不带“while”的if或while循环;测试“;并使用「;不是";操作人员,bash,conditional-statements,Bash,Conditional Statements,如果我这样做: if grep someexpression somefile >/dev/null; then ... fi 事情进展顺利 要执行“不”,我知道我可以这样做(使用[]这是测试命令): 一个简单的解决方法: grep someexpression somefile >/dev/null if [ '!' $? ]; then ... fi 但是上面的解决方法不适用于while循环,因此我需要编写一个函数,这很烦人。我如何用正确的方法来处理上面的grep
if grep someexpression somefile >/dev/null; then
...
fi
事情进展顺利
要执行“不”,我知道我可以这样做(使用[]这是测试命令):
一个简单的解决方法:
grep someexpression somefile >/dev/null
if [ '!' $? ]; then
...
fi
但是上面的解决方法不适用于while循环,因此我需要编写一个函数,这很烦人。我如何用正确的方法来处理上面的grep问题?试试:
if ! grep someexpression somefile >/dev/null; then
...
fi
请注意,后面的空格代码>是必需的,否则它将(尝试)调用历史扩展。尝试:
if ! grep someexpression somefile >/dev/null; then
...
fi
请注意,后面的空格代码>是必需的,否则它将(尝试)调用历史扩展。有趣。上次我遇到这个问题时,我就试过了,它说“没有这样的事件”。但是你的例子很好这甚至是文档中的一个例子。(在ksh中也可以工作,但我不确定它是否是有效的POSIX shell语法。)您启用了历史扩展。这在脚本中应该不是问题。我以交互方式禁用它,因为它会导致更多的问题@马特,是POSIX。它并没有永远存在,但我怀疑仍然有这样的shell的严重用户(就像bash/korn bourne shells之前那样)。@Peter:你可能没有在之间留出空间代码>和grep
。没有空格(在命令行上),!grep
将在历史记录中搜索以grep
开头的最后一个命令。对于空格,它将用作否定运算符。有趣。上次我遇到这个问题时,我就试过了,它说“没有这样的事件”。但是你的例子很好这甚至是文档中的一个例子。(在ksh中也可以工作,但我不确定它是否是有效的POSIX shell语法。)您启用了历史扩展。这在脚本中应该不是问题。我以交互方式禁用它,因为它会导致更多的问题@马特,是POSIX。它并没有永远存在,但我怀疑仍然有这样的shell的严重用户(就像bash/korn bourne shells之前那样)。@Peter:你可能没有在之间留出空间代码>和grep
。没有空格(在命令行上),!grep
将在历史记录中搜索以grep
开头的最后一个命令。对于空格,它将用作一个求反运算符。