如果ack找到结果,请执行此操作;否则那样做

时间:2014-10-24 13:54:45

标签: bash ack

我试图写出一个脚本,它将自动执行一项更乏味的任务。我几乎把所有东西都搞砸了,可以让代码的各个组件按照我的意愿去做,但是我在尝试让if语句工作时遇到了麻烦。这就是我要做的事情:

if [ ack --ignore-case 'foo' ]; then
    Do this action
else
    Do that action
fi

截至目前,它始终执行else操作,即使ack参数为true。

谢谢!

2 个答案:

答案 0 :(得分:3)

只需放下方括号

即可
if ack --ignore-case 'foo' ; then
    Do this action
else
    Do that action
fi

您不想检查字符串ack --ignore-case 'foo'是否为空,您想检查确认退出状态。

你应该收到警告告诉你:

-bash: [: --ignore-spaces: binary operator expected

答案 1 :(得分:2)

删除[ - 您要检查确认的退出状态:

if ack --ignore-case 'foo'; then
如果遇到匹配,

ack返回0(成功)退出状态。

虽然它可能看起来像一个语法结构,但[实际上是一个函数(与test同义),如果测试通过则返回0。 if正在查看此函数的返回码。在这种情况下,ack会为您提供所需的返回代码,因此您也不应该使用[

相关问题