首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果ack找到结果,则执行此操作;否则执行此操作。

如果ack找到结果,则执行此操作;否则执行此操作。
EN

Stack Overflow用户
提问于 2014-10-24 13:54:45
回答 2查看 189关注 0票数 0

我正试图写出一个脚本,它将使我的一项更乏味的任务自动化。我几乎把所有的东西都弄下来了,可以让代码的各个组件按照我的意愿去做,但是我在尝试让if语句工作时遇到了麻烦。我想做的是:

代码语言:javascript
复制
if [ ack --ignore-case 'foo' ]; then
    Do this action
else
    Do that action
fi

到目前为止,即使ack参数是真的,它也总是执行else操作。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-24 13:58:49

删除[ -要检查ack的退出状态:

代码语言:javascript
复制
if ack --ignore-case 'foo'; then

如果遇到匹配,ack返回0(成功)退出状态。

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

票数 2
EN

Stack Overflow用户

发布于 2014-10-24 13:58:38

只要去掉方括号

代码语言:javascript
复制
if ack --ignore-case 'foo' ; then
    Do this action
else
    Do that action
fi

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

你应该收到警告告诉你:

代码语言:javascript
复制
-bash: [: --ignore-spaces: binary operator expected
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26549343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档