我正试图写出一个脚本,它将使我的一项更乏味的任务自动化。我几乎把所有的东西都弄下来了,可以让代码的各个组件按照我的意愿去做,但是我在尝试让if语句工作时遇到了麻烦。我想做的是:
if [ ack --ignore-case 'foo' ]; then
Do this action
else
Do that action
fi到目前为止,即使ack参数是真的,它也总是执行else操作。
谢谢!
发布于 2014-10-24 13:58:49
删除[ -要检查ack的退出状态:
if ack --ignore-case 'foo'; then如果遇到匹配,ack返回0(成功)退出状态。
虽然它看起来像一个语法构造,但[实际上是一个函数(test的同义词),如果测试通过,它返回0。if正在查看此函数的返回代码。在这种情况下,ack会为您提供所需的返回代码,因此您不应该也使用[。
发布于 2014-10-24 13:58:38
只要去掉方括号
if ack --ignore-case 'foo' ; then
Do this action
else
Do that action
fi您不想检查字符串ack --ignore-case 'foo'是否为非空,而是要检查ack的退出状态。
你应该收到警告告诉你:
-bash: [: --ignore-spaces: binary operator expectedhttps://stackoverflow.com/questions/26549343
复制相似问题