Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何创建不带“while”的if或while循环;测试“;并使用「;不是";操作人员_Bash_Conditional Statements - Fatal编程技术网

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
开头的最后一个命令。对于空格,它将用作一个求反运算符。